【发布时间】:2016-08-05 22:23:37
【问题描述】:
我最近接受了一次采访,其中一个问题是extern "C" 在 C++ 代码中的用途。我回答说是在 C++ 代码中使用 C 函数,因为 C 不使用名称修饰。有人问我为什么 C 不使用名称修饰,老实说我无法回答。
我知道 C++ 编译器在编译函数时,会给函数一个特殊的名称,主要是因为我们可以在 C++ 中重载同名的函数,这些函数必须在编译时解析。在 C 中,函数的名称将保持不变,或者可能在其前面加上一个 _。
我的问题是:允许 C++ 编译器也破坏 C 函数有什么问题?我会假设编译器给它们起什么名字并不重要。我们在 C 和 C++ 中以相同的方式调用函数。
【问题讨论】:
-
C 不需要 修改名称,因为它没有函数重载。
-
如果 C++ 编译器破坏了函数名,如何将 C 库与 C++ 代码链接?
-
" 我回答说是在 C++ 代码中使用 C 函数,因为 C 不使用名称修饰。" - 我认为情况正好相反。 Extern "C" 使 C++ 函数在 C 编译器中可用。 source
-
@Engineer999:如果你用 C++ 编译器编译 C 的子集,它也是 C++,函数名确实会被破坏。但是,如果您希望能够链接使用不同编译器创建的二进制文件,则不需要名称修改。
-
C 确实会混淆名称。通常,重整的名称是函数的名称,前面有一个下划线。有时它是函数名后跟一个下划线。
extern "C"说要以与“C”编译器相同的方式修改名称。
标签: c++ c name-mangling extern-c