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

c – 带C连接的非外部功能

发布时间:2020-12-16 05:42:09 所属栏目:百科 来源:网络整理
导读:在没有外部链接的情况下可以用C连接声明一个函数吗?尝试编译时 extern "C" static void f() {} 我得到 f.cc:1: error: invalid use of 'static' in linkage specification 这在某种程度上是有道理的.在命名空间{extern“C”void f(){}}中,extern说明符似乎
在没有外部链接的情况下可以用C连接声明一个函数吗?尝试编译时
extern "C" static void f() {}

我得到

f.cc:1: error: invalid use of 'static' in linkage specification

这在某种程度上是有道理的.在命名空间{extern“C”void f(){}}中,extern说明符似乎覆盖了匿名命名空间的限制范围.

如果这是不可能的,在将函数指针传递给C时是否重要?

解决方法

你可以做
extern "C" {
  static void f() {}
}

这将给出函数f的C连接,这实际上意味着它在你的平台上使用C调用约定.该函数的名称仍然具有C /内部链接,因为语言链接规范仅适用于外部链接的函数名称.

如果在声明中直接指定extern“C”,则“标准”指定extern“C”也是存储类说明符,因此如果要添加静态,则会产生冲突.

Does it matter when passing a function pointer to C

从理论上讲,这种实现可以不同于调用类型具有C连接的函数,调用类型具有C连接的函数.我不知道实现细节,只是规范说了什么.最好遵循规范,你是安全的.

(编辑:李大同)

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

    推荐文章
      热点阅读