1. ホーム
  2. c

[解決済み] C89モードでコンパイルすると`C89`が、C99モードでコンパイルすると`C99`が出力されますが、どのように出力されますか?

2022-07-06 03:34:09

質問

このC言語プログラムをWebで見つけました。

#include <stdio.h>

int main(){

    printf("C%d\n",(int)(90-(-4.5//**/
    -4.5)));

    return 0;
}

このプログラムの面白いところは、C89モードでコンパイルして実行すると、次のように表示されることです。 C89 と表示され、C99モードでコンパイルして実行すると C99 . しかし、私はこのプログラムがどのように動作するのかを理解することができません。

の第2引数がどのように動作するのか説明できますか? printf がどのように働くのか説明できますか?

どのように解決するのですか?

C99では // -スタイルのコメントを許しますが、C89は許しません。そこで、翻訳するために

C99:

 printf("C%d\n",(int)(90-(-4.5     /*Some  comment stuff*/
                         -4.5)));
// Outputs: 99

C89:

printf("C%d\n",(int)(90-(-4.5/      
                         -4.5)));
/* so  we get 90-1 or 89 */