2016-05-05 3 views
0

Kürzlich haben wir unsere Fähigkeit verloren, Codes in C-Compilern zu testen, bei denen eine Variablendeklaration am Anfang eines Gültigkeitsbereichsblocks erforderlich ist.Stellen Sie sicher, dass die Variablendeklaration nur zu Beginn des Gültigkeitsbereichsblocks erfolgt

Es dauerte nicht lange, bis der Quellcode von Deklarationen irgendwo in irgendeinem Block überlagert wurde. Diese Unterschiede im Coding-Stil blieben eine Zeit lang unbemerkt, da sie von keiner unserer Warnungen erfasst werden konnten. Aber sie sind ziemlich schlecht für unsere Portabilitätsziele.

Es gibt laufende Bemühungen, unsere Fähigkeit wiederherzustellen, kontinuierliche Tests an C-Compilern mit dieser Einschränkung durchzuführen. Aber parallel versuche ich eine gcc Warn-Flag-Kombination zu finden, die helfen könnte, sie zu erkennen.

oder -pedantic würde diese Situation erkennen, aber sie würden auch Tonnen von anderen unerwünschten Warnungen generieren. Ich möchte zum Beispiel // Kommentarstil oder Komma am Ende der Aufzählungsliste oder (...) variadic Makros oder long long Typen autorisieren. Manchmal gibt es eine Möglichkeit, bestimmte Warnungen auszuschalten (-Wno-long-long oder -Wno-variadic-macros), und manchmal kann ich keine (// Kommentar-Stil) finden.

Es klingt albern, ein Paket von Warnungen zu aktivieren und die meisten davon zu deaktivieren, nur um das relevante zu behalten. Aber wenn das die einzige Möglichkeit ist, geht es mir gut.

+1

Mischen von Deklarationen und Anweisungen ist gültig C, also jeder Compiler Compiler muss solchen Code akzeptieren. Da es auch nur eine Frage des Stils und nicht fehleranfälliger ist als die Dezarierung am Anfang eines Blocks, wäre es eine Überraschung, dass ein Compiler eine solche Option bietet. Schließlich ist ein Compiler kein Style-Checker. – Olaf

+4

'-Wldeklaration-nach-Anweisung 'ist der Typ, den Sie wollen. –

+0

@PaulGriffiths: Habe ich die Frage in diesem Ritt vermisst? Es sieht nur aus wie eine persönliche Aussage. – Olaf

Antwort

2

-Wdeclaration-after-statement ist die GCC-Option, die Sie möchten. Von der Handbuchseite:

Warnung, wenn eine Deklaration nach einer Anweisung in einem Block gefunden wird. Dieses Konstrukt, bekannt aus C++, wurde mit ISO C99 eingeführt und ist standardmäßig in GCC unter erlaubt. Es wird nicht von ISO C90 unterstützt und war nicht unterstützt von GCC-Versionen vor GCC 3.0.

Verwandte Themen