使用 C 库头文件的 C++ 程序将 "this"识别为关键字。外部 "C"错误?

标签 c++ c this header-files extern

我的 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/

相关文章:

JavaScript 闭包和 this 对象

jquery - 在 jQuery 中引用 $(this) 的元素

c++ - 用于 smtps 的窗口 api

c - 使用 strtok 验证用户在 C 中输入的日期的问题

c++ - 是否有必要在 main 中声明一个函数?

css - 闪烁的按钮(带有 GTK+ 的 C)

c++ - 从内存映射寄存器读取

javascript - addEventListener 及其范围

c++ - 如何避免 C++ 中 operator== 实现的错误?

c# - MFC 中的硬件加速