Heim > Artikel > Backend-Entwicklung > Werden undefinierte Konstanten in C- und C-„#if'-Makros als 0 ausgewertet?
Eine häufige Annahme ist, dass Präprozessoren undefinierte Konstanten als 0 interpretieren, wenn sie in #if-Bedingungen verwendet werden . Aber kann man sich darauf konsequent verlassen, oder führt es zu unvorhersehbaren Ergebnissen?
Die Antwort liegt in den Standards C99 und C 17.
C99-Standard
Der C99-Standard legt in §6.10.1 ¶3 Folgendes fest:
„Nachdem alle Ersetzungen aufgrund der Makroerweiterung und des definierten unären Operators durchgeführt wurden, werden alle verbleibenden Bezeichner durch die PP-Nummer 0 ersetzt.“ „
C 17-Standard
Ähnlich heißt es im C 17-Standard in §16.1 ¶4:
„Nach allen Ersetzungen aufgrund von Makroerweiterungen und.“ Nachdem der definierte unäre Operator ausgeführt wurde, werden alle verbleibenden Bezeichner und Schlüsselwörter, außer wahr und falsch, durch die pp-Zahl 0 ersetzt , ist es sowohl in C als auch in C tatsächlich zuverlässig anzunehmen, dass undefinierte Konstanten in #if-Bedingungen als 0 ausgewertet werden. Dieses Verhalten ist in den Sprachstandards explizit definiert und gewährleistet eine konsistente Ausführung über verschiedene Compiler und Plattformen hinweg.
Das obige ist der detaillierte Inhalt vonWerden undefinierte Konstanten in C- und C-„#if'-Makros als 0 ausgewertet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!