gpt4 book ai didi

c - 将函数指针强制转换为 C 中的另一个函数指针是否安全?

转载 作者:行者123 更新时间:2023-12-03 15:41:13 25 4
gpt4 key购买 nike

将这两个函数转换为回调指针类型然后在不回退的情况下调用它们是否安全?

typedef void (*callback)(int i, ...);

void foo() {
// something.
}

void foo2(int i, int j) {
// something.
}

int main(void)
{
callback c = (callback)&foo, c2 = (callback)&foo2;
(*c)(0); (*c2)(0,1);
return 0;
}

最佳答案

强制转换本身是安全的,但调用函数时必须使用正确的类型。这就是 C 标准 6.3.2.3 所说的:

A pointer to a function of one type may be converted to a pointer to a function of another type and back again; the result shall compare equal to the original pointer. If a converted pointer is used to call a function whose type is not compatible with the referenced type, the behavior is undefined.


在你的情况下 void (*)(int i, ...)与其他任何一个函数都不兼容,所以这段代码是非常未定义的行为。然而,一些编译器为泛型函数指针与非原型(prototype) void foo() 一起使用提供了非标准扩展。风格。但那一个又是过时的 C,因此不应使用 - 始终使用 void foo (void)在 C 中,从不空括号。

关于c - 将函数指针强制转换为 C 中的另一个函数指针是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66206606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com