3 Stimmen

Ist diese zweifelhafte Verwendung einer Nicht-Prototyp-Funktionsdeklaration gültig?

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X