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:將所有警告視爲錯誤