GCC allows customization of printf specifiers.但是,我没有看到如何“教”它接受我的字符串类%s
说明符。我的字符串类是一个简单的字符指针包装器,并且只有一个成员变量(char * data)并且没有虚函数。因此,将它按原样传递给printf-like函数代替常规的char *
是可以的。问题是gcc静态分析器阻止我这样做,我必须明确地将它转换为const char *
以避免警告或错误。GCC:为字符串输出定制printf
我的CString看起来是这样的:
class cstring
{
cstring() : data(NULL){}
cstring(const char * str) : data(strdup(str)){}
cstring(const cstring & str) : data(strdup(str.data)){}
~cstring()
{
free(data);
}
...
const char * c_str() const
{
return data;
}
private:
char * data;
};
示例代码,使用的CString:
cstring str("my string");
printf("str: '%s'", str);
在GCC我得到这个错误:
错误:无法传递的对象非trivially- ''''类'cstring'到'
错误:格式'%s'需要类型'char *'的参数,但参数1具有类型'cstring'[-Werror = format]
cc1plus.exe:将所有警告视为错误