我正在编译一个C ++应用程序,该应用程序使用带有GCC 4.7的C库。
编译时,我收到以下警告:
warning: non-local variable ‘const ptg_t param’ uses anonymous type
warning: ‘typedef const struct<anonymous> ptg_t’ does not refer to the unqualified type, so it is not used for linkage
为什么c ++将其视为警告,而c则不然?
有没有办法在不更改定义ptg_t param
的库头文件的情况下修复它?
答案 0 :(得分:3)
C ++的设计期望实现将类型名称用作受损符号名称的一部分。 C没有按照预期设计。
这是因为C没有函数重载而C ++没有。在C ++中,您可以使用具有相同名称的不同实体,因此需要进行名称修改。
所以在C ++中,涉及匿名类型的外部是异常。
首选修复是将C代码编译为C,而不是C ++。然后将其与其余的C ++程序链接。当您从C ++中包含标题时,请执行以下操作:
extern "C" {
#include "headername.h"
}
这有点重复:不要将C代码编译为C ++。 C不是C ++的子集,而且有一些有效的C程序也是有效的C ++,但它们在C ++中具有与C语言不同的必需行为.C ++很容易从C语言移植到C语言,但它并不完全向后兼容C。