Ist dies ein gültiger C (C99) Code?
int f();
int g(int x)
{
if (x<0) return f(x);
else return f(x,x);
}
Offensichtlich hat das Programm ein undefiniertes Verhalten, wenn g
immer mit einem negativen Argument aufgerufen wird und f
ist keine Funktion, die eine einzelne int
Argument, oder wenn g
immer mit einem nicht-negativen Argument aufgerufen wird und f
ist keine Funktion, die zwei int
Argumente. Aber sonst?
Betrachten Sie als Beispiel diese separate Quelldatei, die Folgendes aufruft g
aus den oben genannten und bietet 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