2020-07-04 #ifdef __cplusplus ex

2020-07-04  本文已影响0人  Wonton_skin

1、声明链接规范
混编C和C++是C++提供的功能,所以只能在C++代码中想办法。C++编译器允许在声明中带 extern "C" ,表示按照C的方式链接,这样声明的代码可以与C交 互。 extern "language" 是可以嵌套的:

extern "C" {
    void a();    // C linkage
    
    extern "C++" {
    void b();    // C++ linkage
    extern "C"
    void c();    //  C linkage
    }

    extern "C++"
    void d();    // C++ linkage
}

如果你希望你的C代码可以被C或C++引用,可以在C头文件中将所有声明放在 extern "C" 大括号里,但C编译器不认识这个语法,需要在C编译器使用头文件的时候,就排除掉 extern "C" ,C++编译器使用头文件的时候,就包含 extern "C" 。所有的C++编译器 都预定义了宏 __cplusplus ,所以在C的头文件可以是如下结构:

// 这是几乎每个头文件都需要的,保证头文件只被包含一次
#ifndefxxx_HEADER_GUARD_H_
#definexxx_HEADER_GUARD_H_    // 如果使用C++编译器,则将头文件中所有声明包含在 extern "C" 中

#ifdef__cplusplus
extern"C"    {
#endif    // __cplusplus    

// ... body of header

#ifdef__cplusplus
}     // closing brace for extern "C"
#endif    // __cplusplus

#endif// xxx_HEADER_GUARD_H_

引用链接https://quant67.com/post/C/mix-c-cpp.html

上一篇下一篇

猜你喜欢

热点阅读