extern关键字的用法

extern关键字的用法
1.引用同一工程下不同文件下的全局变量

 a.cpp  int data = 10;
  b.cpp extern int data ;cout<<data<<endl;//success
  a.c int a = 10;
  b.c extern int a; printf("%d\n",a);//success

 不管是在 .c还是.cpp中,如果有static修饰全局变量,会将此全局变量从global变为local.
                         另外同一工程下其他文件引用此变量不会成功
  .c和.cpp的区别
  如果在.cpp中,const修饰全局变量时 会将此全局变量从global变为local.
                另外同一工程下其他文件引用此变量不会成功
2.C++调用c语句
  C++编译器生成符号的规则是根据函数名加参数列表
  C编译器生成符号的规则是根据函数名
  但是C++编译器可以生成c语言的符号 只要利用extern "C"'即可

main.c 
  int sum(int a,int b)
  {
    return a+b;
  }
  test.cpp
  extern "C" //告诉C++编译器extern里面的按照C编译器规则生成符号 那么就能找到sum符号
  {
    int sum(int a,int b);
  }
 #ifdef __cplusplus  
   extern "C" {  
   #endif  

上面的写法就是为了能将C代码和c++代码混用 如果在c++代码中遇到这种写法,就是告诉C++编译器以c的生成符号规则符号

C编译器不能生成C++符号  如果想要C语句调用c++语句,那么以下面的做法:

main.c extern int sum();//sum符号
   test.cpp
   int sum(int a,int b) //sum_int_int符号
   {
     return a+b;
   }

 但是要在.C文件中引用.cpp的函数 由于两者生成的符号不同 为了能让.c调用.cpp的函数

 在.cpp中加入extern 'c'  让其以c的符号规则生成符号 那么在连接阶段 .c文件就可以找到sum符号的定义处

test.c引入c++代码
main.cpp

extern  "C"
{
	int sum(int a,int b)
	{
		return a+b;
	}
};

test.c

extern int sum(int a,int b);



int main()
{
	int tmp = sum(10,20);
	printf("%d\n",tmp);
	return 0;
}
.cpp引用.c代码

main.cpp
extern  "C"
{
	int sum(int a,int b);
	
};

int main()
{
	int tmp = sum(10,20);
	printf("%d\n",tmp);
	return 0;
}


test.c
int sum(int a,int b)
{
    return a+b;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值