Ich bin ein bisschen verwirrt über die Art von Ausdruck, den wir mit dem #IF-Präprozessor in der C-Sprache verwenden können. Ich habe den folgenden Code ausprobiert und es funktioniert nicht. Bitte erläutern Sie und geben Sie Beispiele für Ausdrücke an, die mit dem Präprozessor verwendet werden können.
%Vor% Der Präprozessor kann keine Variablen aus dem C-Programm in Ausdrücken verwenden - er kann nur auf Präprozessor-Makros wirken. Wenn Sie versuchen, c
im Präprozessor zu verwenden, erhalten Sie nicht das, was Sie erwarten könnten.
Sie erhalten jedoch auch keinen Fehler, da der Präprozessor, wenn er versucht, einen Bezeichner auszuwerten, der nicht als Makro definiert ist, den Bezeichner mit einem Wert von Null behandelt.
Also, wenn Sie dieses Snippet treffen:
%Vor% Der vom Präprozessor verwendete c
hat nichts mit der Variablen c
aus dem C-Programm zu tun. Der Präprozessor prüft, ob für c
ein Makro definiert ist. Da dies nicht der Fall ist, wird folgender Ausdruck ausgewertet:
was natürlich falsch ist.
Da Sie scheinbar die Variable c
in Ihrem Programm nicht verwenden, können Sie Folgendes tun, um das Verhalten in Übereinstimmung mit dem zu bekommen, was Sie versuchen:
(Beachten Sie, dass ich auch den Makronamen in Übereinstimmung mit der Konvention für Makronamen in Großbuchstaben geschrieben habe.)
Der Präprozessor wird auf dem Text ausgeführt, bevor eine Kompilierung durchgeführt wird. Es weiß nicht, wie man C analysiert. Was Sie wahrscheinlich wollten anstatt int c=1;
war
und der Test funktioniert so, wie Sie ihn hatten:
%Vor%Der Schlüssel hier ist, dass dies alles vor Kompilierzeit definiert ist. Der Präprozessor kümmert sich nicht um C-Variablen, und es ist ihm sicherlich egal, wie ihre Werte sind.
Beachten Sie, dass die Präprozessor-Makronamen in ALL_CAPS
definiert sind.
In Ihrem Beispiel ist c
ein vom Compiler erzeugtes Symbol, c
hat keinen Wert bis Laufzeit , während Präprozessor-Ausdrücke bei build-time ausgewertet werden ( Wie der Name schon sagt, bevor der Compiler den Code verarbeitet, kann er also nur auf Pre-Prozessor-Symbolen operieren, deren zur Build-Zeit existiert.
Darüber hinaus müssen solche Ausdrücke Kompilierzeitkonstanten oder tatsächlich genauer Vorverarbeitungszeitkonstante sein, da Compilerkonstantenausdrücke wie zB sizeof(...)
ebenfalls nicht definiert sind während der Vorverarbeitung.
Der Präprozessor wertet C-Variablen nicht aus. Es "bearbeitet" den Quellcode vor der Kompilierung und hat somit eine eigene Sprache. Tun Sie das stattdessen:
%Vor%Tags und Links c c-preprocessor