c和c++生成函数符号规则不同
c++调用c .cpp加extern"c"
extern"c"下包含的是以c语言的规则来处理的
extern"c"//extern"c"下包含的代码是以c语言的规则来处理的
{
extern int Sum(int,int)
}
c调用c++:
1、c++源文件可以修改,.cpp加extern"c"
2、c++源文件不可以修改,加一个中间层MySum,MySum是对Sum的再包装
如下图所示b.c使用c的编译器,而a.c使用的编译器不能确定。
-Cplusplus C++编译器里默认的宏。即若宏存在则是由C++编译器编译的
#ifdef ——Cplusplus
extern "c"
{
#endif
int Sum(int a,int b)
{
return a+b;
}
#ifdef——Cplusplus}
}
#endif
c++的引用——》别名
引用符号和类型结合 没有和类型结合就是取地址
引用的特点:
1、引用一定要初始化(底层以指针的形式支持在所有引用变量 使用的地方,系统自带解引用的过程)
int &b=a;
cout<<&b<<endl;//cout<<&(*b)<<endl;
2、引用不能引用不能取地址的数(寄存器里的值)
3、引用不能改变
4、引用变量使用时,使用的是引用变量,所引用的变量
常引用引用不能取地址的数据,首先数据生成临时量,常引用引用临时量(const int &c=15; int &c=15(error))
函数不能返回局部变量的地址或引用(可能会导致数据错误 局部变量会在函数返回后被销毁 当函数调用完毕,栈指针回撤,函数生命周期结束,但这时内存存储的内容并没有改变 ,当这时调用其他函数时内存上的值可能被覆盖,所以可能会出现数据错误 )
static 局部变量//.data