我的 C++ 程序需要使用外部 C 库。 因此,我正在使用
extern "C"
{
#include <library_header.h>
}
我需要使用的每个模块的语法。
到现在为止它运行良好。 一个模块在其一个头文件中使用 this 名称作为一些变量。 C 库本身编译良好,因为据我所知,this 从来都不是 C 中的关键字。
但尽管我使用了 extern "C" 语法, 当我包含该头文件时,我的 C++ 程序出现错误。
如果我将 C 库头文件中的每个 this 重命名为 _this 之类的名称, 一切似乎都很好。
问题是:
extern "C" 语法不应该足以向后兼容吗? 至少在语法级别,对于头文件? 这是编译器的问题吗?
最佳答案
Shouldn't the extern "C" syntax be enough for backward compatibility, at least at syntax level, for an header file? Is this an issue with the compiler?
没有。 Extern "C"用于链接 - 特别是用于生成符号名称(“名称修饰”)和调用约定(将生成什么程序集来调用 API 和堆栈参数值)的策略 - 不是编译。
您遇到的问题不仅限于 this
关键字。在我们当前的代码库中,我们正在将一些代码移植到 C++ 中,并且我们有如下结构:
struct Something {
char *value;
char class[20]; // <-- bad bad code!
};
这在 C 代码中运行良好,但是(像您一样)我们被迫重命名以便能够编译为 C++。
关于使用 C 库头文件的 C++ 程序将 "this"识别为关键字。外部 "C"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646581/