C89 GCC 4.7.4형식화하는
안녕하세요,
난 그냥 이런 매크로를 실험 하였다
#define LOG_INFO_1(fmt, ...) printf(fmt, __VA_ARGS__)
#define LOG_INFO_2(...) printf(__VA_ARGS__)
그리고 다음과 같이 사용 :
LOG_INFO_1("%s:%d", __func__, __LINE__);
LOG_INFO_2("%s:%d", __func__, __LINE__);
출력 결과가 정확히 동일합니다. 첫 번째 매크로에 fmt
인수를 사용하면 어떤 이점이 있는지 궁금합니다. 그것은 정말로 필요한 것 같지 않습니다. 내가 어떻게 그것을 사용할 수 있을까? 어떤 제안에 대한
많은 감사합니다, 당신이 사용 변주는 중요하지 않습니다 매크로에 대한
형식 문자열 만 전달하려는 경우에는 차이가 있습니다. 'LOG_INFO_1 ("단순한 문자열")'. 그렇게하면'LOG_INFO_2'가 올바르게 확장되는 반면'LOG_INFO_1'는'printf' ('__VA_ARGS__'가 빈 문자열로 확장되기 때문에)의 후행 쉼표로 인해 컴파일러 오류가 발생합니다. –