Implizite Funktionsdeklaration in C

Ammar Ali 12 Oktober 2023
Implizite Funktionsdeklaration in C

In diesem Tutorial wird das Entfernen der Warnung vor der impliziten Funktionsdeklaration erläutert, indem die Funktionen über der Hauptfunktion in C deklariert werden.

Implizite Funktionsdeklaration in C

Manchmal zeigt der Compiler eine Warnung vor der impliziten Deklaration der Funktion in C-Sprache, was bedeutet, dass die Funktion nicht über der Funktion main() deklariert wird oder ihre Header-Datei nicht enthalten ist.

Beispielsweise gehört die Funktion printf() zur Header-Datei stdio.h, und wenn wir sie nicht einbinden, bevor wir sie in einer C-Quelldatei verwenden, zeigt der Compiler eine Warnung an, dass die Funktionsdeklaration implizit ist .

In diesem Fall müssen wir die Header-Datei, die die Funktionsdeklaration enthält, einbinden oder die Funktion über der Funktion main() deklarieren. Lassen Sie uns zum Beispiel die Funktion printf() verwenden, ohne ihre Header-Datei einzubinden.

Siehe Code unten.

int main() {
  int a = 10;
  printf("a = %d", a);
  return 0;
}

Ausgabe:

main.c: In function 'main':
main.c:5:5: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
    5 |     printf("a = %d",a);
      |     ^~~~~~
main.c:5:5: warning: incompatible implicit declaration of built-in function 'printf'
main.c:1:1: note: include '<stdio.h>' or provide a declaration of 'printf'
  +++ |+#include <stdio.h>
    1 |
a = 10

In der obigen Ausgabe können wir sehen, dass der Compiler eine Warnung ausgegeben hat, dass die Deklaration der Funktion printf() implizit ist und wir die Datei <stdio.h> einbinden müssen, oder wir müssen eine Deklaration von angeben die Funktion printf() in der Quelldatei.

Wir können auch sehen, dass der Wert von a gedruckt wird, was bedeutet, dass die Funktion printf() perfekt funktioniert hat, obwohl wir ihre Header-Datei nicht eingebunden haben.

Lassen Sie uns nun die Header-Datei einschließen und das obige Beispiel wiederholen. Siehe Code unten.

#include <stdio.h>

int main() {
  int a = 10;
  printf("a = %d", a);
  return 0;
}

Ausgabe:

a = 10

Wir können oben sehen, dass die Warnung der impliziten Funktionsdeklaration dieses Mal nicht angezeigt wird, weil wir die Header-Datei für die Funktion printf() eingebunden haben.

Die implizite Funktionsdeklarationswarnung wird auch angezeigt, wenn wir eine Funktion in einer Quelldatei erstellt, aber nicht über der Funktion main() deklariert haben.

Der Compiler warnt, wenn wir versuchen, die Funktion aufzurufen, dass die Funktionsdeklaration implizit ist. Lassen Sie uns zum Beispiel eine Funktion erstellen und sie von der Funktion main() aufrufen, ohne sie über der Funktion main() zu deklarieren.

#include <stdio.h>

int main() {
  int a = fun(2, 3);
  printf("a = %d", a);
  return 0;
}

int fun(int x, int p) {
  int a = x + p;
  return a;
}

Ausgabe:

main.c: In function 'main':
main.c:4:13: warning: implicit declaration of function 'fun' [-Wimplicit-function-declaration]
    4 |     int a = fun(2, 3);
      |             ^~~
a = 5

In der obigen Ausgabe können wir sehen, dass die Warnung für die von uns erstellte Funktion angezeigt wird. Wir müssen die Funktion über der Funktion main() deklarieren, um dieses Problem zu lösen.

Lassen Sie uns zum Beispiel die Funktion über der Funktion main() deklarieren und das obige Beispiel wiederholen. Siehe Code unten.

#include <stdio.h>

int fun(int x, int p);
int main() {
  int a = fun(2, 3);
  printf("a = %d", a);
  return 0;
}

int fun(int x, int p) {
  int a = x + p;
  return a;
}

Ausgabe:

a = 5

Wir können sehen, dass die Warnung jetzt weg ist. Wir können die Funktion auch in einer Header-Datei deklarieren und die Header-Datei dann in die Quelldatei aufnehmen, was bei vielen Funktionen nützlich ist, da es den Code vereinfacht.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Verwandter Artikel - C Function