Implizite Deklaration der Funktion ‘wait’

Lesezeit: 2 Minuten

Benutzer-Avatar
AyeJay

Ich erhalte eine Warnung > Implizite Deklaration der Funktion ‘wait’ < und wenn ich das Programm starte, funktioniert es korrekt, ich würde gerne verstehen, warum ich diese Warnung erhalte?

Danke im Voraus

Bearbeiten: Ich habe vergessen, die enthaltene Bibliothek hinzuzufügen

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>


void create (char* program, char** arg_list)
{
  /* put your code here */
  pid_t childPid;
  int status;

  if((childPid = fork()) < 0){
    printf("Failed to fork() --- exiting...\n");
    exit(1);
  }
  else if (childPid == 0){ // --- inside the child process
    if(execvp(program, arg_list) < 0){ // Failed to run the command
      printf("*** Failed to exec %s\n", program);
      exit(1);
    }
  }
  else{ // --- parent process
    while(wait(&status) != childPid)
      printf("...\n");
  }
}

  • Sie vermissen die #include Zeile für die Funktion.

    – Barmar

    26. Januar 2017 um 23:16 Uhr

Ihnen fehlen wahrscheinlich die Überschriften für wait(2):

  #include <sys/types.h>
  #include <sys/wait.h>

  • Danke, ich habe die Wartebibliothek vergessen

    – AyeJay

    26. Januar 2017 um 23:20 Uhr

  • Ist sys/types.h erforderlich, wenn Sie keinen der Typen verwenden, die von a zurückgegeben werden wait Funktionsaufruf?

    – MichaelM

    18. Februar um 18:02 Uhr

  • @MichaelM Ich antwortete basierend auf dem, was die Linux-Manpage hatte zu dieser Zeit .Aber es wurde da in diesem entfernt verpflichten. Der Grund, warum es früher aufgenommen wurde, lag an Typen, die von verwendet wurden wait (wie zum Beispiel pid_t). [continued]

    – PP

    18. Februar um 18:27 Uhr


  • @MichaelM Aber das Einschließen notwendiger Typen sollte von gehandhabt werden sys/wait.h selbst, anstatt von den Benutzern zu verlangen, sie einzuschließen. Posix erfordert nicht sys/types.h entweder. Zusammenfassend, sys/types.h ist für die Verwendung nicht erforderlich wait!

    – PP

    18. Februar um 18:27 Uhr

  • @PP Danke für die Klarstellung! Ich wollte nur sicher gehen, dass ich es richtig verstanden habe. Ich konnte ohne kompilieren sys/types.h und es gab keine Komplikationen, aber ich wollte sicherstellen, dass es keine “versteckten” Probleme gibt, die mir nicht bekannt waren.

    – MichaelM

    22. Februar um 18:59 Uhr


Sie müssen Folgendes angeben:

#include <sys/types.h>
#include <sys/wait.h>

oben im Programm, um die Deklaration der Funktion zu erhalten.

Dies zeigt sich in der Manpage

1353190cookie-checkImplizite Deklaration der Funktion ‘wait’

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy