26
|
Emile Cormier · 技术社区 · 15 年前 |
![]() |
1
20
它是不安全的,每一个C++标准。如中所述 this SO posting :
根据 Martin York 在这个答案中,在某些平台上尝试这样做存在现实问题。
进行你的C ABI回调
编辑:从标准中添加一些支持性引用(emphasis mine): 3.5“程序和链接”:
及
|
![]() |
2
6
在搜索和解决其他问题时,我找到了一个清晰简洁的答案(无论如何,对于standardese):
Comeau
这不是未定义的行为,它显示了如何在函数指针类型(通过typedef)中包含语言链接:
|
![]() |
3
5
对于所有我知道的Windows C++编译器,答案是肯定的,但是语言标准中没有任何东西保证这一点。但是,我不会让你停止,这是一种非常普遍的使用C++实现回调的方法,但是你可能需要声明静态函数WiAPI。这是从我自己的旧线程库中获取的:
其中,这是te Windows线程API使用的回调。 |
![]() |
4
3
ABI不被C或C++标准覆盖,即使C++确实通过“语言链接”来实现。
据我所知,ISO的规则不允许一个标准超过每10年一次(但可以有各种出版物,如TC1和TR1 for C++)。此外,还有一个想法(我不确定这是否来自ISO,是否是从C委员会,甚至是从其他地方继承过来的)是“提炼/标准化现有实践,而不是进入左边的领域,还有 许多的 现有做法,其中一些做法相互冲突。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |