Ich habe vor kurzem -pedantic
Option auf gcc aktiviert und jetzt habe ich ungefähr zwei oder drei Seiten von "ISO C90 verbietet gemischte Deklaration und Code" Warnungen.
Mein Ziel bei diesem Projekt ist es, es auf jedem Mainstream -System mit einem AC-Compiler zu implementieren, daher ist es nicht ratsam anzunehmen, dass C99 überall unterstützt wird, aber es ist lohnt es sich sogar, diese Warnungen anzugehen?
Gibt es immer noch Systeme mit c-Compilern, die gemischte Deklaration und Code nicht unterstützen?
Nun, war / ist es deine Absicht, deinen Code in C89 / 90 oder in C99 zu schreiben?
Da dies die einzige Warnung ist, um die Sie anscheinend besorgt sind, wurde Ihr Code offensichtlich in C89 / 90 geschrieben. Wenn es wirklich so ist und Sie vorhaben, bei C89 / 90 zu bleiben, dann bleibe ich bei C89 / 90 und verschiebe alle Deklarationen an den Anfang des Blocks.
Wenn Sie dagegen bereit sind und auf C99 umsteigen möchten, sind "unangebrachte" Deklarationen kein Problem mehr. Dann wird Ihr Hauptanliegen die Plattform / Compiler-Unterstützung. MS Visual Studio C-Compiler sind C89 / 90-Compiler. Ist das ein Problem? (In Anbetracht dessen, dass GCC auf Windows-Plattformen verfügbar ist).
Wenn Sie -pedantic
über den C99-Standard sein wollen, fügen Sie die Option -std=c99
hinzu.
Persönlich mag ich den älteren sortenreinen Stil, weil er es einfacher macht, visuell zu überprüfen, welche Arten von Speicher die Funktion verwendet, und zu entscheiden, was vor dem Zurückkehren eventuell benötigt wird ().
Ich bin mir nicht sicher, ob ich das ändern würde.
Wenn Sie jedoch entscheiden, dass Sie wollen, ist es ziemlich einfach (so sollten Sie vielleicht); Habe einfach alle deine Deklarationen direkt nach dem Beginn eines Codeblocks. Wenn Sie sie später unbedingt definieren müssen, verwenden Sie einen anderen geschachtelten Codeblock.
IIRC, Visual C ++ erlaubt keine gemischten Deklarationen und Code im C-Modus.
Visual C ++ ist im Allgemeinen in der C99-Unterstützung zurückgeblieben. Möglicherweise hat sich die Situation in letzter Zeit jedoch verbessert, und es ist möglicherweise möglich, den Code im C ++ - Modus zu kompilieren.
Ich würde diese spezielle Warnung eliminieren, da das Mischen von Code und Deklarationen kein weit verbreitetes Feature ist.
Eigentlich habe ich das gleiche Problem mit einer Bibliothek, die ich schreibe. Ich verwende variadic Makros, aber diese scheinen mehr unterstützt zu werden.
Um sicherzustellen, dass meine Bibliothek wirklich von anderen genutzt werden kann, werde ich sie mit so vielen Compilern testen, wie ich kann. Ich habe es bereits mit Visual C ++ Express und Pelles C gemacht und ich werde etwas anderes versuchen (OpenWatcom, Mars C und lcc-Win32 mindestens).
Leider stellt SourceForge nicht mehr eine Compiler-Farm zur Verfügung, wie sie es vor einigen Jahren getan hat, und ich kann es nicht auf kommerziellen Unix-Compilern testen.
Tags und Links c compiler-warnings