Jemand behauptete in einer Präsentation, dass wenn Sie
hinzufügen %Vor%Am Anfang jedes gültigen C -Programms würde dieses Programm noch kompilieren. Das scheint eine kühne Behauptung zu sein. Irgendein Gegenbeispiel, das Sie im Sinn haben und beweisen, dass der Typ falsch ist?
Ein weiteres Gegenbeispiel zum else
Claim, von dem ich denke, dass es auf K & amp; R C zurückgeht:
Dem do
muss genau eine Aussage folgen. if (condition) statement; else statement;
stellt eine Anweisung dar, aber die Eliminierung von else
würde dazu führen, dass es sich um zwei Anweisungen handelt.
Wie für struct vs Union, gegeben
%Vor% Ich denke, dass ein Compiler erforderlich wäre, um die 3 in a[2].x
(auch bekannt als a[2].y
) zu speichern und keine zusätzlichen Initialisierungswerte speichern könnte. Wenn t
eine Struktur gewesen wäre, wäre die 3 in a[1].x
gegangen, und es hätte Platz für drei weitere Werte gegeben.
Wenn STATIC_ASSERT()
Ihr bevorzugtes statisches Assermakro ist, dann:
wird nicht kompiliert, wenn Sie #define struct union
haben.
ist ungültig (und kann daher nicht kompiliert werden), wenn Sie #define else
davor hinzufügen.
Ein Bezeichner, der momentan als objektartiges Makro definiert ist, darf nicht neu definiert werden eine andere # define Preprocessing-Direktive, es sei denn, die zweite Definition ist ein objektähnliches Makro Definition und die zwei Ersatzlisten sind identisch.
(ISO / IEC 9899: 1999, §6.10.3, 2)
Tags und Links c language-lawyer unions struct c-preprocessor