2012-12-01 5 views
5

#define에서 정수를 사용하는 경우 sprintf()C99에있는 숫자는 data type 인 것으로 간주됩니까?#define의 정수는 어떤 데이터 유형입니까?

#define NUMBER 100 

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

'sprintf ("% i \ n", 100)'와 (과) 동일하지 않습니까? –

+1

Thumb of Rule : 매크로는 텍스트 복사하여 붙여 넣기입니다. :) – 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 식별자에 붙여 : 100 이후

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

는 정수 리터럴, 당신은 %d을 사용해야합니다.

+0

맞아, sprintf()에서 변수를 깜박했다! –

관련 문제