通过将函数指针转换为void函数然后调用它来“破坏”返回值是否是未定义的行为?

问题描述 投票:0回答:1

说,类似这样:

int SayHelloThenReturnTen(void) {
    puts("Hello world");
    return 10;
}

然后再说:

((void(*)(void))SayHelloThenReturnTen)();

这样安全吗?通过强制转换为void指针“破坏”返回值是否安全?这是安全的跨平台平台,还是undefined behavior

c function casting function-pointers undefined-behavior
1个回答
1
投票

这是未定义的行为,因为您正在通过不兼容的函数指针类型调用函数。

如果您不想使用返回值,那就不要使用它:

SayHelloThenReturnTen();

或将结果表达式转换为void

(void)SayHelloThenReturnTen();
© www.soinside.com 2019 - 2024. All rights reserved.