[c++11]宏

extern “C”的作用如下:
核心作用:实现C和C++的混合编程。extern “C”提供一个链接交换指定符号,用于告诉C++这段函数是C函数,extern “C”后面的函数不使用C++的名字修饰,而是使用C。
C++支持函数重载,C不支持函数重载。函数被C++编译后在库中的名字与C语言不同。如void add(int a, int b),该函数在C编译器编译后,库中名字为_add,而C++编译器则会生成add_int_int的名字。故C++提供C链接交换指定符号extern “C”来解决名字匹配> 问题。
被extern “C”限定的函数或变量是extern类型,extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,此关键字告诉编译器,该声明的函数可以在本模块或其它模块使用。被extern “C”修饰的变量和函数按照C语言方式编译和链接。
与extern对应的关键字是static,被static修饰的全局变量和函数只能在本模块中使用。如果一个函数或变量只能在本模块中使用时,不能用extern “C”修饰。


#include 

using namespace std;

int main(void)
{

    cout << "__FILE__:" << __FILE__ << endl;//当前的文件名(绝对路径):C:\Users\xxx\source\repos\案例\宏\Source.cpp
    cout << "__LINE__:" << __LINE__ << endl;//当前行: 10
    cout << "__DATE__:" << __DATE__ << endl;//当前日期:Oct 24 2019
    cout << "__TIME__:" << __TIME__ << endl;//当前时间:11:29:59 

#ifdef __STDC__
    cout << "__STDC__:" << __STDC__ << endl;/* use standard C future */
    cout << "__STDC_VERSION__:" << __STDC_VERSION__ << endl;
#else
     /* use extend C future */  //因为当前是用c++编译
    cout << "不使用标准c" << endl;
#endif // __STDC__


    cout << "__cplusplus:" << __cplusplus << endl;//c++的编译器版本:199711
#ifdef __OBJC
    cout << "__OBJC__:" << __OBJC__ << endl;//测试是否使用object-c编译器编译还是c编译器编译
#else
    cout << "不使用object-c编译器" << endl;
#endif // __OBJC


#ifdef __ASSEMBLER__
    cout << "__ASSEMBLER__:"<<__ASSEMBLER__ << endl;//处理汇编时用到
    /* 汇编代码 */
#else
    cout << "不使用汇编代码" << endl;
#endif
    return 0;
}

[c++11]宏_第1张图片

你可能感兴趣的:([c++11]宏)