用C表示类型转换并键入安全性

Sor*_*ush 2 c types casting type-safety

在米切尔的书(编程语言中的概念)第6.2.1章中,它提到:

输入演员表.类型转换允许将一种类型的值用作另一种类型.特别是在C中,可以将整数转换为函数,允许跳转到不包含正确形式的指令的位置为C函数.

所以我打算使用这种非安全性并做一些不寻常的事情我试过这样的事情(伪代码):

int x = 0;
print "loop";
x();
Run Code Online (Sandbox Code Playgroud)

创建一个无限循环.我试过改变和测试,但我无法应对.我怎么能做这些东西或其他所有东西呢?

提前致谢

Mat*_*lia 6

这不是它的工作原理.

在C中,您可以将整数值强制转换为函数指针值,然后调用此类函数指针

void (*ptr)() = (void (*)())42;
ptr();
Run Code Online (Sandbox Code Playgroud)

但这可能只会导致崩溃,除非您确切知道自己在做什么,即您已经以某种方式知道在地址42处启动具有该签名的函数; 在这个例子中具有固定地址可能发生在系统编程中,而在应用程序编程中极少见.

什么其实更经常发生比希望(尤其是在Windows编程)是通过围绕铸造一些整数函数指针(在回调LPARAM/ WPARAM人?),然后抹上他们回到函数指针实际使用它们.

此外,执行此类强制转换/调用时所发生的情况超出了C标准的范围,这使得实现可以自由地在这方面做他们想要的事情.

  • 你可以,尽管没有好处.它肯定不会对"工作"的任何有意义的定义"起作用". (2认同)