这是正确的代码吗?
class SomeClass;
SomeClass* createSomeClass(); // just returns new SomeClass
void* (*createFuncPtr)();
int main()
{
createFuncPtr= (void* (*)()) &createSomeClass;
SomeClass* instance = (SomeClass*)createFuncPtr();
}
C 标准说:
第768章
与指向的类型不兼容,行为未定义。
在这种情况下,函数类型是否兼容?或者,如果我想避免类似的麻烦,我是否必须在调用函数指针之前重新转换它?
SomeClass* instance = ((SomeClass* (*)())createFuncPtr)();
Thanks!
编辑:是的,它包含 C++ 代码,但如果仅是 C,我的问题仍然有效,请保留 C 标签。
来自 C99 标准第 6.7.5.1 节第 2 段:
为了使两个指针类型兼容,两者都应具有相同的限定,并且两者都应是指向兼容类型的指针。
在您的情况下,函数指针不兼容,因为返回值不兼容。所以,是的,你必须在调用指向的函数之前进行强制转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)