C++简单理解

 

问题1extern “C” 理解:

extern "C"是告诉C++编译器以C Linkage方式编译,也就是抑制C++的name mangling机制,void Test(void);

C++编译器可能实际把它改名为vTest_v,C++的重载/namespace等机制就是这样来的。而

extern "C" void Test(void)

则和C编译器一样为_Test。

主要用与在C++代码中调用的C函数的声明,或C++中编译的函数要在C中调用。

如果在c++中编写一个程序需要用到c的库,那该如何?如果这样声明一个c函数:

void f(int a,char b);

c++编译器就会将这个名字变成相应的修饰名,比如:?f@@YAXHD@Z。

然而,c编译器编译的库的内部函数名(连接器使用)是完全不同的。这样,当c++连接器连接c的函数库时,将会产生内部使用函数不匹配。

故,c++中提供了一个替代连接说明(alternate linkage specification),它是通过重载extern关键字来实现的。

extern后跟一个字符串来指定想声明的函数的连接类型,后面是函数声明,比如:

extern "C" void f(int a,char b);

这样,就是告诉编译器是c连接,这样就不会转换函数名了。此例中,编译后的内部函数名是_f。

 

 

 

 

问题2:命名空间namespace理解:

命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突,

C++中命名空间的作用类似于操作系统中的目录和文件的关系,由于文件很多,不便管理,而且容易重名,于是人们设立若干子目录,把文件分别放到不同的子目录中,不同子目录中的文件可以同名。调用文件时应指出文件路径。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值