Saya telah menemukan program C ini dari web:
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
Hal yang menarik dengan program ini adalah bahwa ketika dikompilasi dan dijalankan dalam mode C89, ia mencetak C89
dan ketika dikompilasi dan dijalankan dalam mode C99, ia mencetak C99
. Tetapi saya tidak dapat menemukan cara kerja program ini.
Bisakah Anda menjelaskan bagaimana argumen kedua printf
berfungsi pada program di atas?
//
komentar gaya C ++ diperkenalkan di C99.gcc
. Tanpastd=c99
Anda akan mendapatkan peringatan, dan jika Anda mengabaikannya, masihgcc
akan menafsirkan sebagai awal komentar (ah - Anda harus menggunakan juga. Saya sudah mengaktifkannya secara default.)//
-pedantic
C89
dengan eksplisitstd=c89
di gcc 4.9.2.#if __STDC_VERSION__ >= 199901L
, bukan//
trik komentar. =)Jawaban:
C99 memungkinkan
//
komentar gaya, C89 tidak. Jadi, untuk menerjemahkan:C99:
C89:
sumber
komentar baris
//
diperkenalkan sejak C99. Karenanya kode Anda sama dengan ini di C89dan sama dengan ini di C99
sumber
Karena
//
komentar hanya ada di C99 dan kemudian standar, kode ini setara dengan yang berikut:Kode yang benar adalah:
sumber