加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – extern“C”和简单extern 之间的区别

发布时间:2020-12-16 10:11:02 所属栏目:百科 来源:网络整理
导读:参见英文答案 What is the effect of extern “C” in C++?????????????????????????????????????13个 我已经看到C/C++代码使用在函数签名中声明的extern“C”,并且还在将CP头包含到CPP文件中时使用. 但有些函数只是在签名之前声明extern(没有“C”). QN1:
参见英文答案 > What is the effect of extern “C” in C++?????????????????????????????????????13个
我已经看到C/C++代码使用在函数签名中声明的extern“C”,并且还在将CP头包含到CPP文件中时使用.

但有些函数只是在签名之前声明extern(没有“C”).

QN1:

这两种定义函数的方式是否具有相同的效果,还是它们意味着不同的东西?

对不起,如果我很傻,但我无法通过谷歌找到这种差异.

例如:

extern int someFunction( void *ret_val);

extern "C" int someFunction( void *ret_val);

QN2:

如果函数在其签名中声明了extern,那么相应的头文件是否必须包含在extern“C”块中?

正如评论中的另一个用户所指出的那样,标记的副本并不完全满足此处的问题.我正在编辑,以便将来其他人可能不会误导成另一个问题.

解决方法

extern“C”只是意味着可以使用C或Cpp编译器编译以下代码块.当您混合使用C/C++代码并且需要跟踪特定于语言的功能时,就可以完成此操作.以更奇怪的方式,C链接在Cpp编译器的存在下变得兼容.

代码可以是从变量/ typedef到完整函数/模块声明的任何内容.

但是如果你这样做:

extern char c; // same goes true for extern int foo()

这意味着你说的是“我正在使用char c,它在此文件外部有一个声明”.更像是在搜索路径中的某个地方的另一个模块.这是隐含的全球性.在运行时,如果c发生变化,则变化会反映在任何地方.这是为了正确提供诸如-Iinclude_file_dirs -Ssource_file_dirs等编译器指令(在GCC或g上).使用功能强大的IDE(如Visual Studio 2010或更高版本),您可以非常轻松地完成这些操作.

“extern”是一个链接关键字.您可以将它与“C”结合使用,以用于特定于编译器的链接指令.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读