아래 정의 된대로 내 SNAP_LISTEN (...) 매크로를 사용하여 비슷한 문제가 발생합니다 (C++에서도). 내가 찾은 유일한 해결책은 args ... 매개 변수를 포함하지 않는 새로운 매크로 SNAP_LISTEN0 (...)을 만드는 것입니다. 내 경우에는 다른 해결책이 보이지 않는다. -Wno-variadic-macros 명령 행 옵션은 가변적 인 경고를 방지하지만 ISO C99는 경고하지 않습니다!
#define SNAP_LISTEN(name, emitter_name, emitter_class, signal, args...) \
if(::snap::plugins::exists(emitter_name)) \
emitter_class::instance()->signal_listen_##signal(\
boost::bind(&name::on_##signal, this, ##args));
#define SNAP_LISTEN0(name, emitter_name, emitter_class, signal) \
if(::snap::plugins::exists(emitter_name)) \
emitter_class::instance()->signal_listen_##signal(\
boost::bind(&name::on_##signal, this));
편집 : 컴파일러 버전
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
편집 : 말하는 명령 행 경고
set(CMAKE_CXX_FLAGS "-Werror -Wall -Wextra -pedantic -std=c++0x
-Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization
-Wformat=2 -Winit-self -Wlogical-op -Wmissing-include-dirs -Wnoexcept
-Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow
-Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default
-Wundef -Wno-unused -Wno-variadic-macros -Wno-parentheses
-fdiagnostics-show-option")
나는 오류가 발생하지 않기 때문에 그 자체가 작동하는 -Wno - 가변 - 매크로 그 가변 받아 들여지지 않는다. 그러나 매트 죠이너와 같은 오류가 발생합니다.
cpfs.c:232:33: warning: ISO C99 requires rest arguments to be used
나는 꽤 오랫동안 나를 혼란스럽게 만들었습니다. 실제로 표준적인 방법은'log_debug ("% s", "Resetting bitmap");'입니다. – Dummy00001
선행 처리기 생략 부호가 하나 이상의 인수를 대체하는 것이 얼마나 이상한 지 알지만 C 생략 부호는 0 이상을 대체합니다. 이 의미를 C99 표준에서 추출하는 데 문제가 있습니다. –