compilernachricht per #pragma

OP #1482410
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.
Persönliche Seite #1482434
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.
Gast #1482650
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.
OP #1482940
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.
Moderator Persönliche Seite #1482984
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?
Gast #1483102
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

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