Was ist mit diesen Warnhinweisen gemeint?

OP #994959
Hallo,
ich bin dabei einen Mega 32 zu programmieren und gebe über einen UART 
Strings ein wodurch ich verschiede PWM's Modulieren kann.
Unter anderem habe ich diese Case Anweisung:

case '1':
    memset(Line,0,sizeof(Line));
    uart_gets(Line, sizeof(Line));
    proz = atoi(Line);
    //my_int = atoi(buffer);

    OCR1AL = proz*2.55;
    break;

dabei bekomme ich aber diese Warnungen:

main.c:117: warning: implicit declaration of function 'memset'
main.c:117: warning: incompatible implicit declaration of built-in 
function 'memset'
main.c:119: warning: implicit declaration of function 'atoi'

was ist damit gemeint? brauche ich eine weiter "include" Datei?

Gruß Martin
OP #995008
habe jetzt mein Code um

#include <stdlib.h>

erweitert, jedoch bekomme ich immernoch diese Warnungen

main.c:118: warning: implicit declaration of function 'memset'
main.c:118: warning: incompatible implicit declaration of built-in 
function 'memset'

sind die Warnungen denn überhaupt so wichtig?
gruß Martin
Gast #995021
> sind die Warnungen denn überhaupt so wichtig?

In diesem Fall nicht. Man sollte aber Programme immer so schreiben, dass
der Compiler keine Warnungen ausgibt. Sonst übersieht man möglicherweise
eine andere Warnung, die auf einen wirkliches Problem hinweist.
OP #995157
Ich habe jetzt folgendes Problem. Ich habe diese Funktion, wie schon 
bemerkt die nicht aus meiner Feder stammt:

void uart_gets( char* Buffer, uint8_t MaxLen )
{
  uint8_t NextChar;
  uint8_t StringLen = 0;

  while (!(UCSRA & (1<<RXC)));
  NextChar = UDR;         // Warte auf und empfange das nächste Zeichen

                                  // Sammle solange Zeichen, bis:
                                  // * entweder das String Ende Zeichen 
kam
                                  // * oder das aufnehmende Array voll 
ist
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
    *Buffer++ = NextChar;
    StringLen++;
  while (!(UCSRA & (1<<RXC)));
    NextChar = UDR;
  }
                                  // Noch ein '\0' anhängen um einen 
Standard
                                  // C-String daraus zu machen
  *Buffer = '\0';
}

Der Pointer "Buffer" fängt nicht immer wieder bei der ersten Stelle an. 
Ich übergebe der Funktion ein Array mit 3 Stellen.
Die Funktion soll immer bei der ersten Stelle des Arrays anfangen zu 
schreiben. Weiß jemand wie ich das hinbekomme?
Gruß Martin
#995160
Das Eingangsposting betreffend: zum Compiler gibt es manpages, und wenn 
man nach dem Wortlaut der Fehlermeldung googelt, bekommt man 100%ig 
einen Treffer, der einem die Loesung aufzeigt.

Aber die Arbeit an andere zu deligieren ist natuerlich bequemer.
Gast #995180
"Implicit Declaration" bedeutet, dass zum Zeitpunkt des Aufrufes der 
Funktion kein Prototyp derselben bekannt ist. Oder auf Deutsch: Der 
Compiler geht deinen Code wahrscheinlich nur einmal von oben nach unten 
durch und kennt an besagter Stelle den Aufruf "memset" nicht.

Bei selbstgebauten Funktionen umschifft man das mit Prototypen, bei 
vorgefertigten Funktionen eben mit dem richtigen include.
Gast #995395
Zeig mal deinen Funktionsaufruf von uart_gets() bzw. den rest vom 
Programm. Wenn du immer den Anfang deines Arrays übergibst, wird auch 
immer an den Anfang geschrieben...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.