매크로 함수에 대한 인수로 매크로 상수를 전달하는 동안 문제가 발생합니다.다른 매크로를 인수로 사용하여 C 매크로 호출
#define ERROR 10
#define MAIN "Main:"
#define LOG(lvl,mod,fmt,...) \
char msg[256] = {0}; \
snprintf(msg, 256, "%s: %d: "fmt,mod,lvl,##__VA_ARGS__)
int main()
{ ....
LOG(ERROR, MAIN, "This is a log statement.\n"); // Doesn't compile
LOG(10, "Main:", "This is a log statement.\n"); // Compiles
....
}
두 번째 로그 문 컴파일하지만 첫 번째 로그 문을 다음과 같은 컴파일 오류가 발생 - -
error: expected `)' before ‘;’ token
error: expected primary-expression before ‘,’ token
error: expected `;' before ‘)’ token
왜 이런 일이를
다음 코드를 고려? 로깅 수준 및 모듈 상수 집합을 정의하고 LOG() 매크로를 호출하는 동안이를 사용할 수 있기를 원합니다.
관련없는,하지만 당신의'LOG' 매크로는 단순한'if' 문 또는 루프 본문없이 작동하지 않습니다 명시 적 브레이커. 대부분의 사람들이'do {...} while (0)'을 사용하여 다중 문장 매크로를 작성하는 이유가 있습니다. –
매크로는 동일한 범위 내에서 여러 개의'msg' 변수를 선언 할 때 깨집니다. – Droppy
문제를 해결하는 방법은 매크로 확장이 생성하는 코드를 확인하기 위해 전 처리기를 실행 한 후 컴파일러에게 중단하도록 알리십시오. –