Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
例如,
string hello = "hello"; printf("%s", hello);
我应该在我的 gcc 编译器中设置什么编译器选项来检测这个?
谢谢!
-Wformat(包含在 中-Wall)
-Wformat
-Wall
这会为您的用例提供以下警告:
警告:格式'%s'需要类型的参数'char*',但参数 2 有类型'std::string {aka std::basic_string<char>}'
'%s'
'char*'
'std::string {aka std::basic_string<char>}'
在任何情况下,将非平凡类型传递给省略号都是错误的,因此即使没有此警告设置,编译器也应该发出诊断。-Wformat对之类的东西更有用printf("%s", 42);。
printf("%s", 42);