[This bug has already been reported in 1998 to the mailing list. Please look there for more explanations: http://gcc.gnu.org/ml/gcc-bugs/1998-08/msg00434.html ]
__attribute__(format(printf, ...)) works for C procedures, but not for C++ methods. g++ counts the implicit "this" parameter, and therefore g++ only accepts declarations with wrong numbers: // This works, but should not: void printMessage(const char* format, ...) __attribute__((format(printf,2,3))); // This should work, but g++ prints the error "format string arg not a string type": GCC bug workaround: Use __attribute__((format(printf,1,2))); Example program: #include <stdio.h> #include <stdarg.h> class Test { public: void printMessage(const char* format, ...) __attribute__((format(printf,1,2))); }; void Test::printMessage(const char* format, ...) { va_list ap; va_start(ap, format); ::vprintf(format, ap); va_end(ap); } int main (int argc, char* argv[]) { long l = 1000; Test test; test.printMessage("This should give a warning if compiled with '-Wformat': %d\n", l); return 0; } -- Summary: __attribute__ ((format (printf, ...))) doesn't work in C++ methods Product: gcc Version: 3.3.3 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mkaufmann at student dot ethz dot ch CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18605