Ich habe dieses C-Programm aus dem Web gefunden:Wie gibt das folgende Programm "C89" aus, wenn es im C89-Modus kompiliert wird, und "C99", wenn es im C99-Modus kompiliert wird?
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
Das Interessante an diesem Programm ist, dass, wenn es kompiliert und in C89-Modus ausgeführt, er druckt C89
und wenn es kompiliert und ausgeführt wird in C99 Modus, druckt es C99
. Aber ich kann nicht herausfinden, wie dieses Programm funktioniert.
Können Sie erklären, wie das zweite Argument von printf
im obigen Programm funktioniert?
Hinweis: Der C++ - Stil '//' Kommentar wurde in C99 eingeführt. –
Netter Trick - aber es scheitert mit 'gcc'. Ohne 'std = c99' erhalten Sie eine Warnung, und wenn Sie sie ignorieren, interpretiert' gcc' das * // 'noch als Anfang eines Kommentars (ah - Sie müssen auch' -pedantic' verwenden Ich habe das standardmäßig.) – usr2564301
@Jongware Nun, ich habe 'C89' mit expliziten' Std = c89' in gcc 4.9.2. – ikh