#define struct union und #define sonst kompiliert noch irgendein C-Programm?

8

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?

    
webuster 05.02.2014, 14:27
quelle

5 Antworten

12

Ich habe ein Gegenbeispiel gefunden (C99):

%Vor%

Dieser wird nicht kompiliert, weil wenn% ce_de% die Variable #define else den Gültigkeitsbereich verlässt. Aber das beinhaltet nicht das i -Ding. Irgendwelche anderen Ideen?

    
webuster 05.02.2014 14:27
quelle
7
%Vor%

C2078: zu viele Initialisierer

    
Laurijssen 05.02.2014 15:18
quelle
5

Ein weiteres Gegenbeispiel zum else Claim, von dem ich denke, dass es auf K & amp; R C zurückgeht:

%Vor%

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.

    
supercat 05.02.2014 19:20
quelle
0

Wenn STATIC_ASSERT() Ihr bevorzugtes statisches Assermakro ist, dann:

%Vor%

wird nicht kompiliert, wenn Sie #define struct union haben.

    
Joseph Quinsey 05.02.2014 14:44
quelle
0
%Vor%

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)

    
undur_gongor 05.02.2014 15:11
quelle