函数有效放置C语言,可以在C函数指针中放置哪些C函数?

I have a C library that uses a struct of function pointers for callbacks. The callbacks will be called from C code.

C库只能理解C.所以你只能传回C语言明确支持和理解的思想.

由于C中没有为任何函数类型定义调用约定,因此无法显式传回C函数.您只能传回C函数(那些用extern“C”明确声明的函数)并保证它们是兼容的.

像所有未定义的行为一样,这似乎有效(比如传回正常的C函数或静态成员).但是像所有未定义的行为一样,它被允许工作.你可以;保证它实际上是正确的或便携的.

extern "C" {

typedef struct callbacks_t {

void (*foo) (const char*);

int (*bar) (int);

} callbacks_t;

// Any functions you define in here.

// You can set as value to foo and bar.

}// extern C

What kinds of C++ functions can I safely place in those function pointers to be called from the C library?

Static member functions?

不,但这恰好适用于很多平台.这是一个常见的错误,会在某些平台上咬人.

Fully specified template functions?

没有.

Non-capturing Lambdas?

没有.

g++ seemingly lets me use all of the above,

是.但它假设您传递给使用C编译器构建的对象(这将是合法的).因为C代码将使用正确的调用约定.问题是当你将这些东西传递给C库时(pthreads会浮现在脑海中).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值