1

例如,

string hello = "hello";
printf("%s", hello);

我应该在我的 gcc 编译器中设置什么编译器选项来检测这个?

谢谢!

4

1 回答 1

10

-Wformat(包含在 中-Wall

这会为您的用例提供以下警告:

警告:格式'%s'需要类型的参数'char*',但参数 2 有类型'std::string {aka std::basic_string<char>}'

在任何情况下,将非平凡类型传递给省略号都是错误的,因此即使没有此警告设置,编译器也应该发出诊断。-Wformat对之类的东西更有用printf("%s", 42);

于 2013-09-10T10:25:32.627 回答