2012-12-01 10 views
5

#defineに整数を使用すると、sprintf()の中にあると考えられるのはdata typeだと、C99にありますか?#defineの整数はどのデータ型ですか?

+2

'sprintf("%i \ n "、100)'と同じではないでしょうか? –

+1

Thumbのルール:マクロはテキストのコピー&ペーストです。 :) – Mysticial

答えて

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

+1

非常に良い答え私はこれを知らなかった。 –

3

このリテラルのタイプはintです。 %dまたは%iを使用してください。

NUMBERは、プリプロセッサでコンパイルすると、文字どおり100に置き換えられます。コンパイラが決してNUMBERを見ることはないので、マクロであるという事実はコンパイラにとって何も意味しません。コンパイラは100しか見ることができません。

2

の前または後にすべての#define -dアイテムを来ることができる簡単なテキスト置換である:ことを想像100ではなくNUMBER識別子の中に貼り付けられます:

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

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

+0

あなたはそうです、私はsprintf()の変数を忘れました! –

関連する問題