で整数を使用すると#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
。
NUMBER
100
プリプロセッサによってコンパイルされると、文字通り置き換えられます。それがマクロであるという事実は、コンパイラーにとっては何の意味もありませんNUMBER
。コンパイラは100
.
すべての#define
-d 項目は単純なテキスト置換です:識別子100
の代わりに が貼り付けられていると想像してください:NUMBER
sprintf(buf, "%i\n", NUMBER);
// ^^^ It's sprintf, don't forget the buffer!
100
は整数リテラルなので、 を使用する必要があります%d
。