-
        

Ergebnis 1 bis 7 von 7

Thema: Fehler warning: implicit declaration of function 'warten_5sec'

  1. #1

    Fehler warning: implicit declaration of function 'warten_5sec'

    Anzeige

    Wäre nett wenn mir jmd erklären könnte weshalb es "warten_5sec ()" nicht erkennt!




    #include "asuro.h" // Compileranweisung (#)


    int main(void) // Hauptfunktion
    {

    Init(); // ASURO in den Grundzustand setzen
    unsigned int i; // Variable i Declaieren


    warten_5sec()
    { for (i=0; i<5000; i++) // er wartet 5 sek
    {Sleep(72);} // 1 ms
    }



    StatusLED (OFF); // alle LED's aus


    StatusLED(GREEN); // Hier wird die Status LED auf grün eingeschaltet
    BackLED(ON,OFF);
    warten_5sec
    StatusLED(OFF); // Status LED aus
    BackLED(ON,ON); // BackLED's an
    warten_5sec
    while (1);
    {
    for (i=0; i<282; i++) // wartet 1 ms
    {Sleep(255);} // wartet 1 sek
    StatusLED (RED);
    for (i=0; i<282; i++)
    {Sleep(255);}
    StatusLED (YELLOW);
    for (i=0; i<282; i++)
    {Sleep(255);}
    StatusLED (OFF);
    }

    FrontLED(ON); // und hier die vordere LED einschalten


    while(1); // Endlosschleife
    return 0; // Rückgabewert der Hauptfunktion
    }
    Fehlermeldung:
    > "C:\ASURO_src\FirstTry\Test-all.bat"

    C:\ASURO_src\FirstTry>make all
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c \
    | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
    [ -s asuro.d ] || rm -f asuro.d
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
    | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
    [ -s test.d ] || rm -f test.d
    -------- begin --------
    avr-gcc --version
    avr-gcc (WinAVR 20100110) 4.3.3
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
    test.c: In function 'main':
    test.c:24: warning: implicit declaration of function 'warten_5sec'
    test.c:25: error: expected ';' before '{' token
    test.c:37: warning: statement with no effect
    test.c:37: error: expected ';' before 'StatusLED'
    test.c:40: warning: statement with no effect
    test.c:40: error: expected ';' before 'while'
    make: *** [test.o] Error 1

    > Process Exit Code: 2
    > Time Taken: 00:01
    Klicke auf die Grafik für eine größere Ansicht

Name:	Screenshot 2014-03-09 16.14.50.jpg
Hits:	3
Größe:	23,6 KB
ID:	27744

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Weil du keinen validen C Code schreibst. Du solltest dir die Fehlermeldungen deines Compilers mal zu herzen nehmen. Dort steht so ziemlich genau drin was nicht valide Syntax ist. Zur Verwendung von Funktionen in C siehe hier:
    https://de.wikibooks.org/wiki/C-Prog...ng:_Funktionen

    Dann wirst du 1. feststellen dass du keine Funktion in einer anderen Funktion deklarieren kannst. (Du deklarierst warte5sec in der Funktion main)
    2. Dass wenn man eine Funktion aufruft diesen Aufruf mit einem Semikolon abschließen muss.

    Noch was zum Stil. Wenn du eine for Schleife schreibst, deklariere die Zähl Variable direkt im Schleifenkopf sofern möglich.
    Also
    Code:
    for(int i = 0; i < LENGTH; i++){}

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Ich wüßte nicht, dass der avr-gcc meckert, wenn man in der main() eine funktion definiert und deklariert. Allerdings hätte der Compiler gern einen Rückgabetyp der Funktion.

    sast

    雅思特史特芬
    开发及研究

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.401
    Zitat Zitat von sast Beitrag anzeigen
    Ich wüßte nicht, dass der avr-gcc meckert, wenn man in der main() eine funktion definiert und deklariert. Allerdings hätte der Compiler gern einen Rückgabetyp der Funktion.
    Mit AVR hat das nichts zu tun, der GCC oder noch algemeiner jeder C-Compiler meckert. Die Fehlermeldungen sind beispielhaft oben gezeigt
    Code:
    test.c:24: warning: implicit declaration of function 'warten_5sec'
    test.c:25: error: expected ';' before '{' token
    test.c:37: warning: statement with no effect
    test.c:37: error: expected ';' before 'StatusLED'
    test.c:40: warning: statement with no effect
    test.c:40: error: expected ';' before 'while'
    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Um noch mal zu der Funktion in einer Funktion zu kommen (Nested Functions) . Der C Standard sieht so etwas nicht vor (Im Gegensatz zum neusten C++ Standard, nennt sich dort lambda Funktion und ermöglicht etwas ähnliches). Es kann jedoch sein dass einzelne Compiler Implementierung dass durchaus unterstützen. Notwendig ist es trotzdem nicht und in diesem Fall dürfte es wohl mehr an mangelnden C Kenntnissen liegen.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Soo, ich habs jetzt mal direkt getestet.
    Abgesehen davon, was der C Standard sagt, geht eine Funktion in der main() ohne Probleme beim Compiler durch. Nur das ich nicht function(){asm volatile("nop":;} sondern void function(){asm volatile("nop":;} verwendet habe.
    Mein makefile ruft den Compiler mit CSTANDARD = -std=gnu99 auf.

    sast

    雅思特史特芬
    开发及研究

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.401
    Zitat Zitat von sast Beitrag anzeigen
    Soo, ich habs jetzt mal direkt getestet.
    Abgesehen davon, was der C Standard sagt, geht eine Funktion in der main() ohne Probleme beim Compiler durch. Nur das ich nicht function(){asm volatile("nop":;} sondern void function(){asm volatile("nop":;} verwendet habe.
    Mein makefile ruft den Compiler mit CSTANDARD = -std=gnu99 auf.
    Du hast dem Compiler gesagt, das er den Standard nicht ernst nehmen soll.
    You may also select an extended version of the C language explicitly with -std=gnu90 (for C90 with GNU extensions), -std=gnu99 (for C99 with GNU extensions)
    Wenn es Standard C sein soll, gehört da -std=c99 hin, oder schreib ein -pedantic dazu.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

Ähnliche Themen

  1. Typedef-Problem (Expected Declaration Specifiers etc...)
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 24.08.2008, 18:29
  2. Implicit declaration
    Von eli4u im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 01.11.2006, 15:37
  3. implicit declaration of function `sbi'
    Von veloxid im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 07.07.2005, 14:05
  4. WARNING!! HACKED BY ????????
    Von ShadowPhoenix im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 20.05.2005, 16:54
  5. Fehler: implicit declaration of function `_SFR_IO8'
    Von MartinITM im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 16.05.2005, 12:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •