Da sizeof() nach dem Ausführen des Präprozessors berechnet wird, sind die Informationen für #if
nicht verfügbar.
C-Compiler sind logisch in zwei Phasen aufgeteilt, auch wenn die meisten modernen Compiler sie nicht trennen. Zuerst wird die Quelle vorverarbeitet. Dies beinhaltet das Ausarbeiten und Einsetzen aller Präprozessor-Bedingungen (#if, #define, Ersetzen definierter Wörter durch ihre Ersetzungen). Die Quelle wird dann an den Compiler selbst weitergeleitet, verarbeitet. Der Präprozessor ist sich der Struktur von C nur minimal bewusst, er hat keine Typkenntnisse, daher kann er keine Konstrukte auf Compiler-Ebene wie sizeof() verarbeiten.
Dies hat b Ein oft gefragt. Mach einfach eine Suche. Hier ist eine Antwort, zum Beispiel http://stackoverflow.com/questions/1717665/c-throwing-compilation-error-on-sizeof-comparison-in-preprocessor-if – AnT
Ich denke, Sie suchen nach LISP oder Scheme :) – leppie