396 Stimmen

Warum lässt sich eine Funktion ohne Parameter (im Vergleich zur eigentlichen Funktionsdefinition) kompilieren?

Ich bin gerade auf einen C-Code von jemandem gestoßen, bei dem ich mich frage, warum er kompiliert wird. Es gibt zwei Punkte, die ich nicht verstehe.

  1. En Funktionsprototyp hat im Vergleich zur eigentlichen Funktionsdefinition keine Parameter.

  2. Der Parameter in der Datei Funktionsdefinition hat keinen Typ.


#include <stdio.h>

int func();

int func(param)
{
    return param;
}

int main()
{
    int bla = func(10);    
    printf("%d", bla);
}

Warum funktioniert das? Ich habe es in mehreren Compilern getestet, und es funktioniert gut.

0voto

Im Deklarator im alten Stil ,

die Bezeichnerliste darf nicht vorhanden sein, es sei denn der Deklarator wird im Kopf einer Funktionsdefinition verwendet (Par.A.10.1). Der Deklarator liefert keine Informationen über die Typen der Parameter durch die Deklaration geliefert. Zum Beispiel kann die Deklaration

int f(), *fpi(), (*pfi)();

deklariert eine Funktion f, die eine ganze Zahl zurückgibt, eine Funktion fpi, die einen Zeiger auf eine ganze Zahl zurückgibt, >und einen Zeiger pfi auf eine Funktion, die eine ganze Zahl zurückgibt. In keinem dieser Fälle sind die Parametertypen >spezifiziert; sie sind im alten Stil.

In der Erklärung im neuen Stil

int strcpy(char *dest, const char *source), rand(void);

strcpy ist ein Funktion, die int zurückgibt, mit zwei Argumenten, das erste ein Zeichen Zeiger, und das zweite ein Zeiger auf konstante Zeichen

QUELLE:- K&R Buch

Ich hoffe, das hat Ihre Zweifel ausgeräumt

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