以下のプログラムは、C89 モードでコンパイルすると `C89` を出力し、C99 モードでコンパイルすると `C99` を出力しますか? 質問する

以下のプログラムは、C89 モードでコンパイルすると `C89` を出力し、C99 モードでコンパイルすると `C99` を出力しますか? 質問する

私はウェブからこの C プログラムを見つけました:

#include <stdio.h>

int main(){

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

    return 0;
}

このプログラムの興味深い点は、C89 モードでコンパイルして実行すると が出力されC89、C99 モードでコンパイルして実行すると が出力されることですC99。しかし、このプログラムがどのように動作するのか理解できません。

printf上記のプログラムで の2 番目の引数がどのように機能するかを説明していただけますか?

ベストアンサー1

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 */

おすすめ記事