1
#define TEST(X, ...) X ## __VA_ARGS__ // (1)
#define TEST(X, args...) X ## args // (2)
기능이 있습니까?의 차이점이 있습니까? (즉, 특정 경우 더 좋은 방법으로 사용할 수 있습니다). 또한 C++ 11에 포함 된 구문이 모두 있습니까?가변 매크로에 대해 2 가지 구문이 다릅니다
#define TEST(X, ...) X ## __VA_ARGS__ // (1)
#define TEST(X, args...) X ## args // (2)
기능이 있습니까?의 차이점이 있습니까? (즉, 특정 경우 더 좋은 방법으로 사용할 수 있습니다). 또한 C++ 11에 포함 된 구문이 모두 있습니까?가변 매크로에 대해 2 가지 구문이 다릅니다
첫 번째 구문은 표준 C99이며 표준 C++ 11입니다. 두 번째는 GNU 특정 확장이라고 생각합니다.
C99에서 (2)는 gcc에서 오류를 발생시킵니다. 나는 당신이 GNU ** CPP ** 확장을 의미한다고 생각합니다. –
@Jesse : (1)과 (2)가 전처리기에 의해 처리되도록 확실히 허용 할 것입니다. "C99에서 (2) gcc에 오류가 발생합니다." 'gcc --std = c99'로 컴파일 할 때를 의미합니까? 아니면 전처리 기없이 컴파일하고 있습니까? – Managu
경고 : ISO C는 명명 된 가변 매크로를 허용하지 않으므로'gcc -Wall -pedantic -std = c99'가 필요합니다. –