【发布时间】:2013-01-03 06:53:24
【问题描述】:
我有一些为 C99 程序编写的头文件。此标头包括所有函数定义,并且不与源文件配对。我将它包含在 C++ 文件中。
我的 C++ 编译器标志包括 -pedantic -std=c++11,它在头文件中给了我各种警告,例如“ISO C++ 禁止复合文字”和“ISO C++ 禁止可变长度数组”。显然,C++ 编译器将 C99 代码视为 C++。两个问题:
- 在尝试编写可在使用不同编译器的各种平台上正确运行的代码时,这是否是一个潜在问题?
- 解决警告并生成符合标准的代码的好方法是什么?我正在考虑使用 gcc 制作一个预编译的头文件,但对该过程知之甚少,无法确保我不会因为在 C++ 源代码中包含 C 预编译头文件而产生意外后果。
谢谢
【问题讨论】:
-
试试 gnu++XX (XX = 98, 03, or 11);否则,您将不得不提出更清洁的解决方案。
-
@dans3itz:我正在使用 -std=c++11。是这个意思吗?
-
1 => 是的。 2 => 创建 C99 代码的 C89 接口,并将 C++ 包含在
extern "C"块中。顺便说一句,C99 本身就是一个可移植性问题。 Windows 中的 Visual c++ 不支持 C99。 -
好吧,C++ 不支持很多 C99 特性。所以没有任何真正的方法可以使这个便携。 gnu++11 将为 C++11 提供一种扩展语言,使代码“工作”。这可能会让你度过这个阶段,但最终,你将需要 sep。 C++ 和 C99 模块,只需调用 C 接口。老实说,仅 C99 的可移植性就是一个问题。
-
Windows 上的可移植性是问题,而不是 C99。这就是制定标准的目的。