bool to int-Konvertierung: Ein tiefer Einblick in seine Portabilität
Ursprüngliche Frage:
Wie portierbar ist die Konvertierung eines Bool-Werts in einen Int-Wert? Können wir sicher sein, dass die folgenden Behauptungen auf allen Systemen gültig sind?
int x = 4 < 5; assert(x == 1); x = 4 > 5; assert(x == 0);
Antwort:
Ja, die Konvertierung von bool in int ist vollständig portierbar und konform mit sowohl C- als auch C-Standards.
Erklärung:
In C , die Konvertierung von bool nach int erfolgt implizit, wie im C-Standard angegeben (§4.7/4 vom C 11- oder 14-Standard, §7.8/4 vom C 17-Standard, §7.3.9/2 vom 20-Standard). . Gemäß diesen Standards:
In unserem Beispiel:
int x = 4 < 5;
Genau übersetzt:
int x = true;
Da true in eins konvertiert wird, ist die Behauptung wird vergehen. In ähnlicher Weise wird in der zweiten Behauptung „false“ in Null umgewandelt, was zu einer erfolgreichen Behauptung führt.
Zusätzliche Informationen für C:
Vor C99 gab es in C keine ein Bool-Typ. Mit C99 wurden jedoch der Typ _Bool und das Makro bool (definiert in der Header-Datei stdbool.h) eingeführt, das zu _Bool erweitert wird. Die Makros true und false sind ebenfalls in derselben Header-Datei definiert, wobei true zur Ganzzahlkonstante 1 und false zur Ganzzahlkonstante 0 erweitert wird.
Gemäß §7.16 von C99:
#define bool _Bool #define true 1 #define false 0
Daher verhält sich die Bool-zu-Int-Konvertierung in C99 und später ähnlich wie in C.
Das obige ist der detaillierte Inhalt vonWie portierbar ist die Umwandlung von Booleschen Werten in Ganzzahlen in C und C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!