www.mikrocontroller.net

Forum: Compiler & IDEs compilernachricht per #pragma


Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
gibt es im gcc ein pragma, mit dem man den Compiler veranlassen kann 
eine Nachricht auszugeben?

sowas wie #pragma message beim msvc

Ich benutze sowas recht gerne für TODOs oder Bug-warnungen,
so dass man im Code dann schreibt:

#pragma TODO("some Optimizatio possible here")

#pragma BUG("possible bug in Mode xy")

und beim compilieren das dann mit File und Zeilennummer in der Ausgabe 
stehen hat.

Autor: Niklas Gürtler (erlkoenig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#warning "Possible bug"
#error "This does not work"

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich ist sowas vorgesehen
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragm...

Aber WinAVR (und AVR-GCC?) kennen #pragma nicht.

Ein schwacher Ersatz wäre eventuell

#warning "Mache mich jetzt an main() ran!"

Schwacher Ersatz, weil die Messagezeile nicht geparst wird. Die Warnung 
wird vorher ausgegeben. Es geht also z.B. nicht

#warning "Compiling" _FILE_

analog zu

#pragma message "Compiling" _FILE_

mit Ersetzen von _FILE_ durch den aktuellen Namen der Quellcodedatei.

#warnung geht auch nur, wenn man die Warnungen nicht per 
Kommandozeilenoption unterdrückt (z.B. -w) hat.

#Warnung gibt automatisch Dateinamen und Zeilennummer mit an.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:

> Eigentlich ist sowas vorgesehen

Ab Version 4.4.

> Aber WinAVR (und AVR-GCC?) kennen #pragma nicht.

WinAVR ist noch auf 4.3. Pragmas gibt es natürlich schon, aber eben 
nicht die Diagnostic Pragmas.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, ok, danke.

das mit dem warning geht zumindest teilweise.

Allerdings sit das halt ne warnung und TODOs hätt ich lieber nicht in 
der Kategorie.

Da verliert man den Blick für echte warnungen

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DaS gehört aber eigentlich auch nicht so in den Code, daß es vom 
Compiler ausgewertet werden muß. Ich verwende dafür einfach einen 
Kommentar, den ich mit "TODO: " beginne. Erstens färbt das 
Syntaxhighlighting meines Compilers dies besonders ein, so daß man es 
beim Ansehen des Code sofort sieht, zweitens kann ich dann per grep nach 
allen Todos suchen. Eine andere Möglichkeit ist auch, wenn man z.B. 
doxygen verwendet, den den Tag @todo dafür einzusetzen. In der 
generierten Source-Doku bekommt man bei den 
Funktionen/Strukturen/Klassen/... dann die Todos mit angezeigt, und es 
gibt außerdem noch eine separate Todo-Liste, wo alle aufgeführt sind.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Erstens färbt das Syntaxhighlighting meines Compilers dies besonders ein...

Welcher Compiler macht denn so was ?

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kennst du das nicht? der Compiler nimmt doch die c-dateien, schaut da 
rein und spuckt rtf-dateien aus - und da ist das farbig.
scnr

@rolf:
muss nicht aber kann.

ein #pragma TODO()
ist doch genauso dokumentativ, wie ein // TODO:
Da steht es ja, mit grep kannst du es immer noch rausholen.

Nur Wenn jemand ein >100-Dateien-Projekt auscheckt, ist es ganz nützlich 
wenn man beim Bauen direkt darauf aufmerksam gemacht wird, und nicht 
erst, wenn man explizit danach schaut, oder gar erst einen Doxygen-Lauf 
gestartet hat, der ansich nochmal 10min+ dauert.

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

Bewertung
0 lesenswert
nicht lesenswert
Vlad Tepesch schrieb:

> ein #pragma TODO()
> ist doch genauso dokumentativ, wie ein // TODO:

Naja, weiß gar nicht, wie pragmas derzeit im Standard definiert sind.
Zu Beginn von C99 waren sie wohl "implementation-defined", und es
gab mal eine Implementierung von GCC, die beim Auftreten eines pragmas
definiert hat, dass das Spiel nethack angeworfen wird. ;-)  War voll
standardkonform...

> Nur Wenn jemand ein >100-Dateien-Projekt auscheckt, ist es ganz nützlich
> wenn man beim Bauen direkt darauf aufmerksam gemacht wird, ...

Dafür wiederum ist aber die Warnung gut.  Dein Code wird doch nicht
etwa noch anderweitige Warnungen generieren?

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein sicher nicht, aber wenn 30 totos in der der Liste hat übersieht man 
die eigendlichen Warnungen, wenn man neuen Code schreibt.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Erstens färbt das Syntaxhighlighting meines Compilers dies besonders
>> ein...
>
> Welcher Compiler macht denn so was ?

Argl.... natürlich meinte ich den Editor.

> ein #pragma TODO()
> ist doch genauso dokumentativ, wie ein // TODO:
> Da steht es ja, mit grep kannst du es immer noch rausholen.

Ja, aber das Pragma ist compilerspezifisch. Ich halte es nicht für 
nützlich, wenn die TODs beim Compilieren irgendwo ausgegeben werden. Der 
Kommentar funktionert Compiler-unabhängig. Wer's unbedingt beim 
Compilieren ausgegeben haben will, schreibt halt einfach den grep-Aufruf 
mit ins Makefile.

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.