Heim > Backend-Entwicklung > C++ > Werden undefinierte Konstanten in #if-Bedingungen in C und C mit 0 ausgewertet?

Werden undefinierte Konstanten in #if-Bedingungen in C und C mit 0 ausgewertet?

Susan Sarandon
Freigeben: 2024-11-15 12:43:02
Original
557 Leute haben es durchsucht

Do Undefined Constants Evaluate to 0 in #if Conditions in C and C  ?

Undefinierte Konstanten und #if-Bedingungsauswertung in C und C

In der Präprozessorlogik spielen Makros und Konstanten oft eine entscheidende Rolle. Ein häufiges Szenario entsteht beim Umgang mit undefinierten Konstanten in #if-Bedingungen. Hier untersuchen wir, ob es gültig ist, sich auf ein vorhersehbares Verhalten dieser undefinierten Konstanten zu verlassen.

Problem:

Entwickler gehen oft davon aus, dass undefinierte Konstanten einen Wert von annehmen 0 bei Verwendung in #if-Auswertungen. Ist diese Annahme zuverlässig oder sollten wir von undefinierten Konstanten undefiniertes Verhalten erwarten?

Antwort:

Ja, auf diese Annahme können Sie sich verlassen. Der C99-Standard legt in §6.10.1 ¶3 klar 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

In ähnlicher Weise schreibt der C-Standard (§16.1 ¶4) Folgendes vor:

Nachdem alle Ersetzungen aufgrund der Makroerweiterung und des definierten unären Operators durchgeführt wurden, sind alle verbleibenden Bezeichner und Schlüsselwörter außer „true“ und „false“ vorhanden durch die pp-Nummer 0 ersetzt

Mit anderen Worten: Nach Makroerweiterungen und anderen Vorverarbeitungsschritten wird jeder undefinierte Bezeichner oder jede Konstante, die in einer #if-Bedingung erscheint, automatisch durch den Wert 0 ersetzt. Dieses Verhalten ist überall konsistent C und C .

Dieses vorhersehbare Verhalten ermöglicht es Entwicklern, undefinierte Konstanten bequem als Flags oder Platzhalter in #if-Bedingungen zu verwenden, ohne undefinierte Ergebnisse oder Fehler zu riskieren. Wenn die undefinierte Konstante nicht vor der Vorverarbeitungsphase definiert wird, behandelt der Compiler sie standardmäßig als 0.

Das obige ist der detaillierte Inhalt vonWerden undefinierte Konstanten in #if-Bedingungen in C und C mit 0 ausgewertet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage