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.
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.
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.
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
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.
> Erstens färbt das Syntaxhighlighting meines Compilers dies besonders ein...
Welcher Compiler macht denn so was ?
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.
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?
nein sicher nicht, aber wenn 30 totos in der der Liste hat übersieht man die eigendlichen Warnungen, wenn man neuen Code schreibt.
>> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.