代码之家  ›  专栏  ›  技术社区  ›  Matt Joiner

默认为外部“C”(C链接)

  •  2
  • Matt Joiner  · 技术社区  · 14 年前

    问题

    gcc、msvc、clang或某些组合是否支持将链接设置为默认值C?

    背景

    我有一个大的混合C/C++项目,虽然在C源代码中用C链接导出符号是很容易和合乎逻辑的,但同样的源假设项目其余部分的内容是C++链接。

    当前的情况需要我明确地包装C源使用的任何东西,这些源在C++源中定义,C++源使用的所有东西都来自C源。 extern "C++" .

    最重要的是,我不能 extern "C" 围绕整个源或头文件,因为实际C++的东西会抱怨。(如来自 #include <memory> 或者我定义的模板。)

    2 回复  |  直到 14 年前
        1
  •  7
  •   Oliver Charlesworth    14 年前

    头文件中的标准模式是:

    #ifdef __cplusplus
    
    // C++ stuff
    
    extern "C" {
    #endif
    
    // C/C++ stuff
    
    #ifdef __cplusplus
    }
    #endif
    

    我不确定你还有别的选择。C/C++的东西必须用C链接到处声明。C++特定的东西必须用C++链接到处声明。

        2
  •  1
  •   wilx    14 年前

    默认情况下,“C”链接只对C源有意义,而不是C++源,反之亦然。“链接通常意味着名称/符号不会被破坏。”C“链接不够表达,不能用于C++源,例如重载函数。