Ganzzahlarithmetik? Führen Sie das folgende Programm, um herauszufinden:
#include "stdio.h"
int main() {
#if 1 + 1 == 2
printf("1+1==2\n");
#endif
#if 1 + 1 == 3
printf("1+1==3\n");
#endif
}
Antwort „ja“ lautet, gibt es eine Möglichkeit der Präprozessor ausführen Integer-Arithmetik zu machen, die es in einem Prä-Prozessor Zustand zu verwenden ist.
Beachten Sie jedoch, dass Ihre Beispiele keine Integer-Arithmetik sind. Ich habe gerade überprüft, und GCCs Präprozessor schlägt fehl, wenn Sie versuchen, Float-Vergleiche durchzuführen. Ich habe nicht überprüft, ob der Standard jemals Gleitkommaarithmetik im Präprozessor erlaubt.
Regular Makroerweiterung nicht ausgewertet integer Ausdrücke, es es an den Compiler verlässt, kann als durch eine Vorverarbeitung (-E in gcc) folgendes zu sehen:
#define ONEPLUSONE (1 + 1)
#if ONEPLUSONE == 2
int i = ONEPLUSONE;
#endif
Ergebnis ist int i = (1 + 1);
(plus wahrscheinlich ein paar Sachen um Quelldateinamen und Zeilennummern anzugeben und so).
PI keine ganze Zahl in dem Beispiel; Daher wären weder OP noch OP2 Ganzzahlen, wenn der Präprozessor gezwungen wäre, sie zu bewerten. Und die Operanden von '%' können keine Fließkommazahlen sein. –