Ich habe ein ähnliches Problem (obwohl in C++) mit meinem Makro SNAP_LISTEN (...) wie unten definiert. Die einzige Lösung, die ich gefunden habe, ist das Erstellen eines neuen Makros SNAP_LISTEN0 (...), das den Parameter args ... nicht enthält. Ich sehe in meinem Fall keine andere Lösung. Die Befehlszeilenoption -WNO-variadic-macros verhindert die variadic Warnung, aber nicht die 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));
Edit: Compiler-Version
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.
Edit: Warnungen Befehlszeile
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")
Das -Wno-variadische-Makros selbst, da ich funktioniert sagen, nicht einen Fehler, dass die variadische wird nicht akzeptiert. Allerdings bekomme ich den gleichen Fehler wie bei Matt Joiner:
cpfs.c:232:33: warning: ISO C99 requires rest arguments to be used
Das hat mich schon eine ganze Weile verwirrt. Eigentlich wäre der normale Weg 'log_debug ("% s "," Bitmap zurücksetzen ");'. – Dummy00001
Wie seltsam, dass die Präprozessor-Ellipse ein oder mehrere Argumente ersetzt, aber die C-Ellipse ersetzt null oder mehr. Ich habe Probleme, diese Semantik aus dem C99-Standard zu extrahieren. –