非局部变量在c++中使用匿名类型警告

non-local variable uses anonymous type warning in C++

本文关键字:类型 警告 局部变量 c++      更新时间:2023-10-16

我正在编译一个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是定义的?

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。