Typedef指向C ++中C函数的指针

塞瓦·阿列克谢耶夫(Seva Alekseyev)

我试图声明将指定C调用约定的函数指针类型(而不是变量)。两个都

extern "C" typedef void (*PFunc)();

typedef extern "C" void (*PFunc)();

在功能级别上使用时,会产生语法错误。

extern "C" { typedef void (*PFunc)(); }
extern "C" typedef void (*PFunc)();

在全局范围内使用时,两者都可以工作;我宁愿将其保留在本地。

请问正确的方法是什么?我不想使用编译器特定的扩展。

根据,指针和目标之间的匹配调用约定是inderectly调用被声明为函数时做安全的事情extern "C",因为C和C ++调用约定可能不匹配。在现实生活中,它们大多不正确,但仍然正确。

轨道轻度竞赛

与某些评论者在这里所说的相反,调用约定/链接函数类型的一部分。必须如此,否则在通过函数指针调用函数时将不知道此信息:

[C++11: 7.5/1]:所有函数类型,具有外部链接的函数名称以及具有外部链接的变量名称均具有语言链接。[..]

正确的声明是:

extern "C" typedef void (*PFunc)();

但是,在块范围内,您不能声明一个函数具有任何链接:

[C++11: 7.5/4]:链接规范嵌套。当链接规范嵌套时,最里面的一个确定语言链接。链接规范未建立范围。联动说明书应仅在命名空间范围(3.3)发生。链接规范中,指定的语言链接适用于所有函数声明符的函数类型,具有外部链接的函数名称以及具有在链接规范内声明的具有外部链接的变量名[..]

因此,您将必须遵守命名空间范围声明。如果您仍然想限制声明的可见性,则可以使用未命名的namespace将其与同一翻译单元中的其他代码“隔离”起来

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C#中创建“指向函数指针的typedef”?

来自分类Dev

C typedef:指向结构的指针

来自分类Dev

指向C ++中函数的指针

来自分类Dev

指向C ++中的函数指针的指针

来自分类Dev

Typedef结构指针正确指向typedef结构(C)

来自分类Dev

指向C中内置函数的函数指针

来自分类Dev

C 中的 typedef 和函数指针

来自分类Dev

C中的typedef和函数指针

来自分类Dev

在C函数中传递指向数组的指针

来自分类Dev

从C ++中的函数返回指向数组的指针?

来自分类Dev

C ++中的函数指针

来自分类Dev

指向C ++中的指针的指针

来自分类Dev

C函数指针和typedef

来自分类Dev

C typedef指向func的指针,带有指向struct的参数指针

来自分类Dev

指向void *函数的指针C ++

来自分类Dev

如何在C中获取指向函数的函数指针?

来自分类Dev

指向指针的c ++指针和接收指向指针的调用函数

来自分类Dev

指向结构的函数的指针,指向typedef的函数的指针

来自分类Dev

C ++-使指向超类的指针与函数中的子类参数匹配

来自分类Dev

指向C ++中未定义函数和参数的指针

来自分类Dev

指向结构中数组的C指针传递给函数

来自分类Dev

如果在 c 中,则指向函数的指针

来自分类Dev

如何更改指针在 C 中的函数内指向的内容?

来自分类Dev

C:指向返回枚举的函数的函数指针

来自分类Dev

在 C 中测试指针函数

来自分类Dev

在C ++中返回指针的函数

来自分类Dev

C中的函数指针表

来自分类Dev

模板中的C ++函数指针

来自分类Dev

您可以从C中当前指向的函数中更改指向函数的指针吗?