매크로 3

debug에 사용할 메시지

printf("\n Debug line %d, in the function %s, in the file %s.\n", __LINE__, __func__, __FILE__); + C99 에 새로 추가된 __func__ : 현재 function을 적어 줍니다. __FILE__과 __LINE__ 등은 어디 에나 정의되어 있지 않습니다. __FILE__은 몰라도 __LINE__을 # define으로 정의하는 등있는 이유가없습니다. 이 같은 정의하지 않고도 마음대로 선언되는 매크로 것을 통합 매크로라고합니다. ANSI C는 6 종류의 내장 매크로를 규정하고있습니다. 매크로 이름 어떻게 전개되는지 __FILE__ __FILE__ 파일 이름 리터럴 문자열. __LINE__ __LINE__ 줄 번호를 나타내는 10 진..

cfaq 8

Q 10.4 여러 문장으로 이루어진 매크로를 만드는 좋은 방법 좀 알려 주세요. Answer 이런 매크로를 만드는 일반적인 방법은 매크로 자체를 일반 함수처럼 쓸 수 있도록 하는 것입니다. 즉 호출하는 쪽에서 마지막 ‘;’을 직접 써 주게 하고 매크로의 몸통에서는 ‘;’을 따로 써 주지 않는 식으로 쓰는 것입니다. 예를 들면: MACRO(arg1, arg2); 그러므로 매크로 정의는 단순히 여러 statement를 중괄호로 둘러싼 ‘compound statement’ 형식으로 만들 수 없습니다. 왜냐하면 이 매크로가 호 출될 때 세미콜론이 추가적으로 붙는다면 if나 if/else 문장에서 에러가 발생할 수 있기 때문입니다. 다음 코드를 보기 바랍니다: if (cond) MACRO(arg1, arg2); ..

Cfaq7

Q 8.9 제 컴파일러에 버그가 있습니다. sizeof('a')의 값이 sizeof(char)인 1 로 나오지 않고, 2가 나옵니다. Answer 놀랍게도, C 언어에서 문자 상수(character constant)의 타입은 int입니 다. 따라서 sizeof('a')는 sizeof(int)와 같습니다. (C++에서는 조금 다릅니다.) 덧붙여 질문 7.8도 참고하시기 바랍니다. Note 참고로 C++에서 문자 상수의 타입은 char입니다. 즉, sizeof('a')는 sizeof(char)와 같습니다. Q 10.1 다음과 같이 간단한, 함수와 비슷한 매크로를 만들려고 합니다. #define square(x) x * x 그런데, 가끔씩 제대로 동작하지 않습니다. 왜 그럴까요? Answer 매크로 확장(ex..