c/c++语言开发共享extern“C”和简单extern 之间的区别

我已经看到C / C ++代码使用在函数签名中声明的extern“C”,并且还包括将C头包含到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 ++代码并且需要跟踪特定于语言的function时,就可以完成此操作。 以更加令人讨厌的方式,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”结合使用,以用于特定于编译器的链接指令。

    extern“C”禁用名称修改。 它将允许您的C ++代码从C编译器编译的库中调用函数

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

    会使someFunction有C连接。

      以上就是c/c++开发分享extern“C”和简单extern 之间的区别相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/559822.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐