如何在clang的-std=c99模式下强制启用-Werror=declaration-after-statement检查
解决方案
clang 中-Wdeclaration-after-statement警告默认在 C99 及更高版本标准下是关闭的,只需要显式开启该警告,再将其提升为错误即可,不需要切换到 C90 标准。
可用编译命令
clang -std=c99 -Wdeclaration-after-statement -Werror=declaration-after-statement prog.c
该配置在 clang 3.0 及以上所有正式版本均可用。
效果说明
对示例代码执行上述命令后,会输出和 GCC 一致的报错:
prog.c:6:6: error: ISO C90 forbids mixing declarations and code [-Werror,-Wdeclaration-after-statement] int i = 0; ^ 1 error generated.
同时完全保留 C99 标准的所有专属特性支持,不会影响代码中 C99 语法的编译。
参数解释
-std=c99: 保留 C99 标准编译,支持所有 C99 专属特性-Wdeclaration-after-statement: 显式开启「语句后声明变量」的检查,不受当前启用的 C 标准限制-Werror=declaration-after-statement: 将该警告升级为编译错误,强制符合编码规范
内容的提问来源于stack exchange,提问作者lkudra
相关产品推荐
相关产品推荐

