#define
에서 정수를 사용하는 경우 sprintf()
의 C99
에있는 숫자는 data type
인 것으로 간주됩니까?#define의 정수는 어떤 데이터 유형입니까?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
#define
에서 정수를 사용하는 경우 sprintf()
의 C99
에있는 숫자는 data type
인 것으로 간주됩니까?#define의 정수는 어떤 데이터 유형입니까?
#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
식별자에 붙여 : 100
이후
sprintf(buf, "%i\n", NUMBER);
// ^^^ It's sprintf, don't forget the buffer!
는 정수 리터럴, 당신은 %d
을 사용해야합니다.
맞아, sprintf()에서 변수를 깜박했다! –
'sprintf ("% i \ n", 100)'와 (과) 동일하지 않습니까? –
Thumb of Rule : 매크로는 텍스트 복사하여 붙여 넣기입니다. :) – Mysticial