【发布时间】:2012-07-22 04:35:27
【问题描述】:
我正在尝试为调试打印定义一个类方法,其行为类似于printf:
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 1, 2)))
这抱怨:
error: format string argument not a string type
我记得一个类方法声明有一个隐含的this参数,所以我把参数的位置改为2、3:
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 2, 3)))
现在它可以编译了,但看起来参数被移动了,好像 this 参数被视为参数列表的一部分。
我如何告诉函数this 不是我要打印的字符串的一部分?
【问题讨论】:
-
可以使用可变参数模板吗?如果是这样,您可以创建一个type safe printf
-
不要想太多
this。这不是一个明确的论点,句号。只需遵循 GCC 手册,其中说对于成员函数,您必须将 1 添加到format-attribute 参数。这只是一个不透明的规则,由编译器扩展的供应商提供给您。 -
printf (2, 3) 是对的。定义“看起来像移位”...?
-
format属性指定格式字符串的样式、格式字符串的参数位置以及...的参数位置。然后编译器使用该信息对带有格式字符串的...参数进行类型检查。 -
呃!即使使用 gcc 6.2,错误仍然很神秘......
标签: c++ gcc printf string-formatting