使用C++编译器包含C头文件时的警告

doc*_*7b5 1 c c++ gcc include

我有一些头文件是为在C99程序中使用而编写的.此标头包含所有函数定义,并且不与源文件配对.我将它包含在C++文件中.

我的C++编译器标志包括-pedantic -std=c++11,它在头文件中给出了各种警告,例如"ISO C++禁止复合文字"和"ISO C++禁止可变长度数组".显然,C++编译器将C99代码视为C++.两个问题:

  1. 当尝试编写将在使用不同编译器的各种平台上正确运行的代码时,这是一个潜在的问题吗?
  2. 什么是解决警告并生成标准符合代码的好方法?我正在考虑使用gcc制作一个预编译的头文件,但是对于确保我不会因在C++源代码中包含C预编译头而产生意外后果的过程知之甚少.

谢谢

Bar*_*nau 5

当尝试编写将在使用不同编译器的各种平台上正确运行的代码时,这是一个潜在的问题吗?

是.GCC可能只是发出警告,其他编译器(例如Visual Studio或其他选项的GCC)很可能会出错.

什么是解决警告并生成标准符合代码的好方法?

解决问题的正确方法是在C和C++的公共子集中编写标头.使用C99功能的函数和对象定义(例如可变长度数组和复合文字)应该移动到单独的C源文件(使用C编译器编译!).