我在代码库上工作,主要是带有一点点C ++的C语言,并且主要是用gcc构建的,但偶尔需要用MSVC构建。 微软的C编译器仍然是C89,只有一些小的扩展,它仍然不支持C ++ / C99的混合代码和变量定义。 因此,我需要找到一种方法来防止开发人员在使用gcc时编写无序代码/变量定义,否则构建随后会破坏MSVC。 如果我使用gcc -std=c89
那么一切都会中断,因为不允许使用C ++风格的注释(可能还有其他问题,但我还没有进一步研究过)。 如果我使用gcc -std=gnu89
则允许无序代码/变量定义,这对我也没有帮助。 有任何想法吗 ? 我想我只需要像gcc -std=c99 -fno-inline-variable-definitions
这样的选项,如果存在这样的选项的话。
您正在使用-Wall
-Wextra
-Wstrict-prototypes
-Wold-style-definition
-Wmissing-prototypes
-Wmissing-declarations
和-Wdeclaration-after-statement
选项,如gcc警告信息页面所述 。 请注意,这些可能会导致系统头文件中的问题产生大量噪音,并且它们只是警告,因此您必须制定一个热衷于实现零警告构建的策略。
我不相信有办法做你想做的事。 MSVC支持的C语言比C99更接近C89(例如,它也不支持指定的初始化器); 你真的想要更类似于C89-with-C ++的东西 – comments-and-inline-keyword。
问题在于C ++注释会影响有效C89代码的正确性。 例如,这条线的含义发生了很大变化:
int a = 10//* foo */2;
我想说你最好的办法是在你的C源文件中强制执行C89,包括C89风格的注释。 inline
可能没问题:你可以在gcc上将它定义为__inline
。
Win32不能使代码无法编译,而是编译器。 您可以在Win32上使用GCC并获得更好的跨平台兼容性。
另一种可能性是为您的Win32构建使用C ++编译; GCC编译已经确定它是有效的C,而C ++编译通常也会使它更强C。
[edit]另一个解决方案是使用连续集成服务器,例如CruiseControl配置,以便每当GCC平台编码签入代码时,CI服务器可以检查它并使用VC ++构建它(甚至应用第三方静态分析工具)并在出错时通过电子邮件将结果发送给签入错误代码的用户。 对于原始问题,这种解决方案可能是重量级的,但除此之外还可能产生许多其他好处。
需要了解更多c/c++开发分享如何在gcc中强制执行C89样式的变量声明?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享如何在gcc中强制执行C89样式的变量声明?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979999.html