Was ist mit diesen Warnhinweisen gemeint?

OP #994959
Lesenswert?

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
Lesenswert?

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
Lesenswert?

> 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
Lesenswert?

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
Gast #995180
Lesenswert?

"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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren