是否可以在没有外部链接的情况下使用 C 链接声明函数?尝试编译时
extern "C" static void f() {}
我明白了
f.cc:1: error: invalid use of 'static' in linkage specification
这在某种程度上是有道理的。在 namespace { extern "C"void f() {} }
中,extern
说明符似乎覆盖了匿名命名空间的限制范围。
如果这不可能,将函数指针传递给 C 是否重要?
最佳答案
你可以做到
extern "C" {
static void f() {}
}
这将为函数 f
提供 C 类型链接,这实际上意味着它在您的平台上使用 C 调用约定。函数名称仍将具有 C++/内部链接,因为语言链接规范仅适用于外部链接的函数名称。
如果您直接在声明中指定 extern "C"
,标准规定 extern "C"
也被视为存储类说明符,因此如果您要添加 static
,则会发生冲突。
Does it matter when passing a function pointer to C
从理论上讲,这可能很重要 - 允许实现在行为上有所不同,从调用类型具有 C++ 链接的函数到调用类型具有 C 链接的函数。不过,我不知道实现细节,只知道规范是怎么说的。最好遵循规范,这样你就安全了。
关于c++ - 带 C 链接的非外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6312998/