gpt4 book ai didi

c - 这种对非原型(prototype)函数声明的可疑使用是否有效?

转载 作者:太空狗 更新时间:2023-10-29 15:56:16 25 4
gpt4 key购买 nike

这是有效的 C (C99) 代码吗?

int f();
int g(int x)
{
if (x<0) return f(x);
else return f(x,x);
}

如果 g 被调用时带有负参数并且 f 不是一个接受单个 int 的函数,显然程序有未定义的行为参数,或者如果 g 曾经使用非负参数调用并且 f 不是一个接受两个 int 参数的函数。但除此之外呢?

以这个单独的源文件为例,它从上面调用 g 并提供 f:

int g();
#ifdef FOO
int f(int a, int b) { return a+b; }
int main() { return g(1); }
#else
int f(int a) { return a; }
int main() { return g(-1); }
#endif

最佳答案

让我们反过来问:为什么它有效?。我真的找不到任何禁止上述代码的参数或规则。永远不会执行相应其他分支中的函数调用(尽管评论中的讨论表明这并不容易!)。

关于c - 这种对非原型(prototype)函数声明的可疑使用是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179366/

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