Search code examples
c++gccprintfstring-formatting

How should I properly use __attribute__ ((format (printf, x, y))) inside a class method in C++?


I'm trying to define a class method for debug prints that will behave like printf:

inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 1, 2)))

When I compile with -Wformat or -Wall, This complains about:

error: format string argument not a string type

I recalled that a class method declaration has an implicit this parameter, so I changed the locations of the parameters to 2, 3:

inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 2, 3)))

and now it compiles, but it looks like the parameters are shifted, as if the this parameter were being treated as part of the argument list.

How can I tell the function that this isn't part of the string that I want to print?


Solution

  • You've done it. this is argument 1, so by saying format(printf, 2, 3) you're telling the compiler that you're NOT printing this, you're printing argument 2 (fmt) with additional arguments past that.