で整数を使用すると#define、 では何とdata type見なされsprintf()ますC99か?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
で整数を使用すると#define、 では何とdata type見なされsprintf()ますC99か?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
#define NUMBER1 100 /* int: use "%d" or "%i" in printf() */
#define NUMBER2 100U /* unsigned int: use "%u" in printf() */
#define NUMBER3 100L /* long int: use "%ld" or "%li" in printf() */
#define NUMBER4 100UL /* unsigned long int: use "%lu" in printf() */
/* C99 */
#define NUMBER5 100LL /* long long int: use "%lld" or "%lli" in printf() */
#define NUMBER6 100ULL /* unsigned long long int: use "%llu" in printf() */
注: U と L は小文字にすることもできます
注 2: U は L または LL の前後に置くことができます
そのリテラルの型はint. %dまたはを使用する必要があります%i。
NUMBER100プリプロセッサによってコンパイルされると、文字通り置き換えられます。それがマクロであるという事実は、コンパイラーにとっては何の意味もありませんNUMBER。コンパイラは100.
すべての#define-d 項目は単純なテキスト置換です:識別子100の代わりに が貼り付けられていると想像してください:NUMBER
sprintf(buf, "%i\n", NUMBER);
// ^^^ It's sprintf, don't forget the buffer!
100は整数リテラルなので、 を使用する必要があります%d。