如何让MSVC对多字函数式转换报错以符合C++标准?
让MSVC在多字函数式转换上遵循C++标准的方法
C++标准明确规定,unsigned int(b)这类多字类型的函数式转换属于非法语法,仅单字类型(如int(a))的函数式转换是合法的。但MSVC默认支持该非标准扩展,导致代码在其他编译器上编译失败但在MSVC上能通过。要让MSVC在此处符合标准,可通过以下方式:
启用MSVC的严格标准模式:
添加编译选项/permissive-,该选项会禁用MSVC的非标准语言扩展,强制编译器严格遵循C标准。此时unsigned int(b)这类代码会触发编译错误,与GCC、Clang等编译器的行为保持一致。
同时建议配合指定C标准版本的选项(如/std:c++17、/std:c++20),进一步明确编译器的标准遵循范围。Visual Studio IDE项目设置操作:
- 打开项目属性窗口,依次进入「配置属性」→「C/C++」→「语言」
- 将「符合模式」设置为「是(/permissive-)」
- 将「C语言标准」设置为目标版本(如C17及以上)
内容的提问来源于stack exchange,提问作者user3001150
相关产品推荐
相关产品推荐

