【发布时间】:2022-12-05 00:52:50
【问题描述】:
此示例 https://godbolt.org/z/EKvvEKa6T 使用此语法调用 MyFun()
(*((int(**)(void))CallMyFun))();
是否有该混淆语法的 C 分解来解释它是如何工作的?
#include <stdio.h>
int MyFun(void)
{
printf("Hello, World!");
return 0;
}
void *funarray[] = { NULL,NULL,&MyFun,NULL,NULL };
int main(void)
{
size_t CallMyFun = (size_t)&funarray + (2 * sizeof(funarray[0]));
return (*((int(**)(void))CallMyFun))();
}
【问题讨论】:
-
怎么解释呢?一些迷上 LSD 的白痴决定故意编写难以理解的代码,以证明他是多么“聪明”——但彻底失败了。暗示:真的聪明的代码唤起更像是“Dang that's简单的.非常简单明了!为什么我没有想到这一点?”这样的代码简直是愚蠢的。
-
这段代码很荒谬,但有问题的行的想法是首先将(数字)地址转换为指向函数的指针,然后取消引用该指针以调用该函数。
标签: c