Forum: Compiler & IDEs compilernachricht per #pragma


von Vlad T. (vlad_tepesch)


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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

#warning "Possible bug"
#error "This does not work"

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Eigentlich ist sowas vorgesehen
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas

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.

von (prx) A. K. (prx)


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.

von Vlad T. (vlad_tepesch)


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

von Rolf Magnus (Gast)


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.

von Gast (Gast)


Lesenswert?

> Erstens färbt das Syntaxhighlighting meines Compilers dies besonders ein...

Welcher Compiler macht denn so was ?

von Vlad T. (vlad_tepesch)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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?

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von Rolf Magnus (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.