How should I properly use __attribute__ ((format (printf, x, y))) inside a class method in C++?
c++, gcc, printf, string-formatting
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.
Problem
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?