PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zur Funktion sleep()



DarkAngelfire
04-05-2008, 12:25
Hallo, ich habe das Problem, dass ich die Funktion sleep zwar normal kompillieren kann, wenn ich den Compiler allerdings auf pendantic stelle bekomme ich immer eine Warning mit der ich und auch Google nichts anfangen können:

Warnung: Implizite Deklaration der Funktion »sleep«
Es handelt sich hier um meine ersten Gehversuche in c und habe nur ein wenig Erfahrung in Java. Ein Tipp was ich an meinem Code verändern muss, damit dieser Fehler verschwindet wäre echt klasse:

#include <stdio.h>
#include <unistd.h>

int main(){
int input;
while(1){
printf("Eingabe: ");
scanf("%d",&input);
sleep(input);
printf("Klappt!\n");
printf("\a");
}
return 0;
}

Vielen Dank schonmal für eure Hilfe,
DarkAngelfire

jan61
04-05-2008, 12:36
Moin,

Du verwendest sleep() in einem void-Kontext, die Funktion liefert aber einen unsigned int zurück. Damit redeklarierst Du sie quasi, weil der Returncode Bestandteil der Funktionssignatur ist. Siehe man 2 sleep.

Abhilfe: Entweder casten oder (sauberer) den RC abfragen:

/* Cast */
(void)sleep(input);
/* RC abfragen */
unsigned int rc;
rc = sleep(input);
Noch was: Ganz korrekt müsste input als unsigned int als definiert sein.

Jan

BLUESCREEN3D
04-05-2008, 14:43
Weiß jemand, wie ich in dem Fall den gcc dazu bringe, so eine Warnung auszugeben? -Wall -pedantic -ansi reicht schonmal nicht - oder ich brauche eine neuere Version ...


Es handelt sich hier um meine ersten Gehversuche in c
Dann kannst du dich ja noch leicht umgewöhnen:
Bevor du wie die meisten printf() als Lösung aller Probleme nutzt: Es gibt auch noch puts().
Und statt return 0 solltest du lieber return EXIT_SUCCESS schreiben (benötigt stdlib.h).

peschmae
04-05-2008, 15:07
Also ich kriege obige Warnung auch nur wenn das entsprechende Include fehlt und ich -Wall verwende; -pedantic hat da keinen Einfluss.

Genau so sollte es imo auch sein - ob ich den Rückgabewert einer Funktion irgendwo speichere, vergleiche oder ignoriere hat den Compiler nicht zu kümmern; wenn ich eine Funktion verwende ohne sie deklariert zu haben dann aber soll der Compiler sich melden - was er tut.

MfG Peschmä