![]() |
1
5
只有指向对象(即,不是函数)的指针才能转换为
你的职责是:
根据标准(6.3.2.3):
所以,您要做的是定义实现。如果您的实现将其定义为可以转换
C99另外定义了类型
|
![]() |
2
0
您要做的是定义实现。无法保证枚举在转换为指向void然后再转换回后具有相同的值。如果您真的需要确定,那么应该使用intptr或uintptr,而不是枚举。在被强制转换为指向void的指针并再次返回之后,它们将保证具有相同的值。 |
![]() |
3
0
alok绝对正确,整数和指针之间的转换是实现定义的,因此完全不可移植。例如,如果
一个常见的习惯用法是扩展约定,这样回调将接收指向动态分配的枚举的指针,该枚举必须是空闲的。在呼叫者中:
…在回调中:
|
![]() |
4
0
尽管编译器允许这样做,并且在某些情况下可能是正常的,但是您需要对对象的生命周期非常小心。 我能看到的主要问题是,除非processEvent函数与infocallback发生在同一调用链中,否则原始somestate变量可能超出范围。所以稍后当您在infocallback中引用时,void*将是未定义的。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 4 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 5 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 5 月前 |