Ich bin neugierig, warum ich fast alle C-Makros so formatiert sehe:
%Vor%Oder das:
%Vor%Aber niemals das:
%Vor% (außerdem scheint vims =
-Operator nur die ersten beiden als richtig zu zählen.)
Liegt dies an Portabilitätsproblemen unter Compilern oder ist dies nur eine übliche Vorgehensweise?
IIRC, ältere C-Präprozessoren benötigten #, um das erste Zeichen in der Zeile zu sein (obwohl ich noch nie eines gefunden hatte, das diese Anforderung hatte).
Ich habe deinen Code nie wie dein erstes Beispiel gesehen. Normalerweise habe ich wie in Ihrem zweiten Beispiel Präprozessor-Direktiven geschrieben. Ich habe festgestellt, dass es den Einzug des eigentlichen Codes weniger störend beeinflusst (nicht dass ich in C mehr schreibe).
Das GNU C Preprocessor Handbuch sagt:
Vorverarbeitungsrichtlinien sind Zeilen in Ihr Programm, das mit '#' beginnt. Whitespace ist vorher und nachher erlaubt das '#'.
Ich habe es auf alle drei Arten gesehen, es scheint eine Frage des Stils zu sein, nicht der Syntax
Obwohl normalerweise das zweite Beispiel am gebräuchlichsten ist, habe ich Fälle gesehen, in denen das erste (oder dritte) verwendet wird, um mehrere Ebenen von #ifdefs zu unterscheiden. Manchmal kann die Logik tief verschachtelt werden, und die einzige Möglichkeit, sie auf einen Blick zu verstehen, ist die Verwendung von Einrückungen, ähnlich wie das Einrücken von Code-Blöcken zwischen {und}.
Ich bevorzuge den dritten Stil, mit Ausnahme der Wächter, für die ich den zweiten Stil verwende.
Ich mag den ersten Stil überhaupt nicht - ich denke an #define
als eine Präprozessor-Anweisung, obwohl es natürlich nicht ist, es ist ein #
gefolgt von der Präprozessor-Anweisung define
. Aber da ich es so sehe, scheint es falsch, sie zu trennen. Ich erwarte, dass Texteditoren, die von Leuten verfasst wurden, die diesen Stil befürworten, einen Blockeinzug / -rückzug haben, der mit Code arbeitet, der in diesem Stil geschrieben wurde. Aber ich würde es hassen, es mit einem Texteditor zu treffen, der das nicht tat.
Es hat keinen Sinn, an alte Präprozessoren zu denken, wo das # das erste Zeichen der Zeile sein muss, es sei denn, Sie können auch alle anderen Unterschiede zwischen diesen Implementierungen und dem Standard C oben auf dem Kopf auflisten, um das zu vermeiden andere Dinge könnten Sie möglicherweise tun, die sie nicht unterstützen würden. Natürlich, wenn Sie wirklich mit einem vor-Standard-Compiler arbeiten, fair genug.
Präprozessordirektiven sind Zeilen, die in unseren Programmen enthalten sind, die eigentlich keine Programmanweisungen sind, sondern Anweisungen für den Präprozessor. Vor diesen Zeilen steht immer ein Rautenzeichen (#) Whitespace ist vor und nach dem '#' erlaubt. Sobald ein Newline-Zeichen gefunden wird, gilt die Präprozessordirektive als beendet.
Es gibt keine andere Regel, soweit der Standard von C / C ++ betroffen ist. So bleibt es hinsichtlich des Stils und der Lesbarkeit, ich habe Programme nur auf die zweite Art gesehen / geschrieben, die Sie gepostet haben, obwohl die dritte scheint lesbarer.
Tags und Links macros c indentation portability