Does extern “C” have any effect in C?

后端 未结 3 1951
既然无缘
既然无缘 2021-02-13 10:03

I just got some C code that uses extern \"C\" to declare external functions like this:

extern \"C\" void func();

Is this valid C? I\'m getting

相关标签:
3条回答
  • 2021-02-13 10:51

    this is a C++ notation to tell the compiler/linker to use C calling standards.

    Usually that line is wrapped in an pre-processor statement.

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    // stuff
    
    #ifdef __cplusplus
    }
    #endif
    
    0 讨论(0)
  • 2021-02-13 10:52

    No, it's not valid C. It should only be used in C++ code to refer to functions defined in C code. The extern "C" should be surrounded in a ifdef __cplusplus/#endif block:

    // For one function
    #ifdef __cplusplus
    extern "C"
    #endif
    void func();
    
    // For more than one function
    #ifdef __cplusplus
    extern "C"
    {
    #endif
    
    void func1();
    void func2();
    
    #ifdef __cplusplus
    }
    #endif
    
    0 讨论(0)
  • 2021-02-13 10:53

    Not valid in C. If present after preprocessing this will result in a diagnostic as per the standard.

    For C++, this turns of name-mangling. See this for more details as to why it may be required. Can you post some more details?

    0 讨论(0)
提交回复
热议问题