在没有外部链接的情况下可以用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连接的函数.我不知道实现细节,只是规范说了什么.最好遵循规范,你是安全的.
原文地址:https://www.jb51.cc/c/113995.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。