这是有效的 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