www.mikrocontroller.net

Forum: Compiler & IDEs sprintf-Warning


Autor: Thomas N. (thomas8443)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich verwende in meinem Programm den Befehl "sprintf"
Das Programm funktioniert damit einwandfrei, jedoch bekomme ich für jede 
Zeile mit "sprintf" folgende warning:

../modus.c:68: warning: incompatible implicit declaration of built-in 
function 'sprintf'

Wie schon gesagt, das programm funktioniert trotzdem einwandfrei...es 
ist aber totzdem störend wenn man beim compilieren 20 warnings deswegen 
bekommt!

Hier eine Beispiel aus dem Programm:

char string[20];
int stopZeit = 10;
sprintf(string,"Zeit: %d\r",stopZeit);

DANKE für eure Mithilfe!

glg tommy

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast vermutlich das #include ... mit der Datei vergessen, in der der 
Prototyp von sprintf deklariert wird.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> Du hast vermutlich das #include ... mit der Datei vergessen, in der der
> Prototyp von sprintf deklariert wird.

<stdio.h>

Autor: Thomas N. (thomas8443)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
reicht normal nicht <String.h> aus?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erstens string.h und nicht String.h, und zweitens wieso string?
snprintf ist in stdio.h, siehe Doku dazu...

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> erstens string.h und nicht String.h, und zweitens wieso string?
> snprintf ist in stdio.h, siehe Doku dazu...

Naja, die Frage von Thomas ist schon berechtigt: Von der Logik her
müssten sprintf und snprintf in string.h deklariert sein, da es sich
dabei um Stringmanipulations- und nicht um I/O-Funktionen handelt. Da
sie aber mit printf und fprintf eine große gemeinsame Codebasis haben,
hat man sie eben mit diesen zu einer Gruppe zusammengefasst.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, aber mein Gemecker ist wohl auch berechtigt m.E..

Man programmiert etwas, bekommt in der Zeile mit snprintf
eine Fehlermeldung, daß mit der Deklaration von snprintf
etwas nicht stimmt, schaut daraufhin nicht in der Doku nach,
fragt in einem Forum, bekommt die Lösung gesagt, wundert
sich immer noch, daß der Fehler auftritt und schaut auch
dann noch nicht in die Doku.
Wie will man so mit Programmieren weiterkommen?
Bei jeder neuen Quelltextzeile wieder fragen?

Das ist ja nicht das erste und auch nicht das letzte
Unlogische an C. Ohne ein Buch oder minimale Online-Doku
wird das halt nichts.

Es ist ja nicht mal böse gemeint. Aber der Hinweis, mal
selber etwas zu lesen, ist manchmal schon angebracht.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mag ja sein, daß es eine alte Platte von mir ist, immer
auf Doku zu verweisen.

Hatte ich mich doch unlängst erdreistet, in einer Klausur
nach dem alten Freund fork() zu fragen.
Und das kommt dann dabei raus...
http://mfgkw.dyndns.org/siehe_man_fork.jpg

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:) „man fork” ist ganz richtig, dort steht doch alles ...

Immerhin: dort wäre gleich am Anfang klar und deutlich gestanden, dass 
man <unistd.h> dafür includen muss (wie <stdio.h> bei „man snprintf”)...

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> ok, aber mein Gemecker ist wohl auch berechtigt m.E..

Natürlich ist es das. Eigentlich hätte die Frage des TE ja lauten
müssen:

  "Ich habe bei der Verwendung von sprintf die Warnung "..." bekommen
  und beim Lesen der Dokumentation festgestellt, dass man dafür stdio.h
  includen muss. Aber warum ist sprintf in stdio.h und nicht in string.h
  deklariert?"

> Und das kommt dann dabei raus...
> http://mfgkw.dyndns.org/siehe_man_fork.jpg

Grintz :) Da scheint jemand in der Vorlesung aufgepasst zu haben. Ich
nehme an, sie/er hat dafür die volle Punktzahl bekommen, oder?.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nö, da war ich ungnädig.
Ich habe mich amüsiert und trotzdem 0 Punkte spendiert.

Schließlich hatte ich in der Vorlesung ja mehr dazu erzählt
als nur man fork...

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> nö, da war ich ungnädig.
> Ich habe mich amüsiert und trotzdem 0 Punkte spendiert.

hehe, ich hätte an der Stelle nen halben Gnadenpunkt spendiert, weil die 
Antwort witzig und nicht vollkommen falsch ist ;)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, er hatte sich bei anderen Fragen besser geschlagen,
das kommt unterm Strich schon hin, und an einer Grenze zur
besseren Note liegt er eh nicht.

(Und "nicht falsch" bedeutet nicht "beantwortet die Frage".)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.