gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:08 25 4
gpt4 key购买 nike

我正在编译一个 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++ 程序的其余部分链接起来。当您包含来自 C++ 的 header 时,请执行以下操作:

extern "C" {
#include "headername.h"
}

值得重复:不要将 C 代码编译为 C++。 C 不是 C++ 的子集,而且还有一些有效的 C 程序也是有效的 C++,但它们在 C++ 中的行为与在 C 中的行为不同。C++ 很容易从 C 移植到 C++,但并不完全向后兼容 C。

关于c++ - 非局部变量在 C++ 中使用匿名类型警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com