【问题标题】:How to set a C version for extern "C"?如何为 extern "C" 设置 C 版本?
【发布时间】:2014-05-29 11:36:38
【问题描述】:

我有 C++ 代码,其中包含一些 C 代码

extern "C"{
 ...
}
int main(){
...
}

我用类似的东西编译它

g++ -std=c++11 main.cpp

用于编译我的代码的C 部分的C 标准的版本是什么?如何为我的 C sn-ps 显式设置版本?

【问题讨论】:

    标签: c++ c gcc extern


    【解决方案1】:

    extern "C" 块中的代码仍编译为 C++(在您的情况下为 C++11)。 extern "C" 只是给它C 链接。

    C 链接意味着可以从 C 调用块中定义的函数,声明但未定义的函数必须由 C 程序定义,否则由具有 C 链接的目标文件定义。

    如果您想编写 C 代码,请用 C 编写,并使用 C 编译器。 extern "C" 用于编写可从 C 调用的 C++ 代码,或用于允许 C++ 代码调用 C(或 C ABI)代码。

    【讨论】:

    • 我已经知道链接部分,我希望编译时有更大的灵活性。
    • @user2485710:你的期望是错误的。如果有的话,您的灵活性会降低,因为您不能拥有与 C 不兼容的函数签名。
    • @user2485710 如果要编译 C 代码,请使用 C 编译器,不要将其放入 C++ 文件中(因为它不是 C 代码)。
    • @user2485710:将语言语义更改为 C 中间文件没有多大意义,文件中已经声明的 C++ 内容会出现一些复杂情况(例如:你能访问上面声明的全局 C++ 对象?),基本上没有任何收获...如果您想将一些代码编译为 C,请将其放入 .c 文件并告诉您的构建系统将其编译为 C,然后链接所有内容最后在一起。
    • @crashmstr 好吧,我所知道的所有编译器基本上不仅仅是一种单一语言的编译器,它们是同时支持多种语言的套件,这就是为什么我期待不同的东西。无论如何,如果是这样,我想我会做不同的事情。
    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2015-12-03
    相关资源
    最近更新 更多