5

で整数を使用すると#define、 では何とdata type見なされsprintf()ますC99か?

#define NUMBER 100

sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
4

3 に答える 3

9
#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 の前後に置くことができます

于 2012-12-01T18:47:25.747 に答える
3

そのリテラルの型はint. %dまたはを使用する必要があります%i

NUMBER100プリプロセッサによってコンパイルされると、文字通り置き換えられます。それがマクロであるという事実は、コンパイラーにとっては何の意味もありませんNUMBER。コンパイラは100.

于 2012-12-01T18:47:12.597 に答える
2

すべての#define-d 項目は単純なテキスト置換です:識別子100の代わりに が貼り付けられていると想像してください:NUMBER

sprintf(buf, "%i\n", NUMBER);
//      ^^^ It's sprintf, don't forget the buffer!

100は整数リテラルなので、 を使用する必要があります%d

于 2012-12-01T18:50:22.710 に答える