1

次のコードを実行すると:

int main()
{
    int a = sizeof(signed) + sizeof(unsigned);
    int b = sizeof(const) + sizeof(volatile);

    printf("%d",a+++b);

    return 0;
}

Visual C ++では、16として出力されます。デフォルトのデータ型は、、signedunsigned見なされconstますか?volatileint

4

3 に答える 3

4

これらの修飾子だけでなく、C言語のデフォルトの型はintです。したがって、どこかでデータ型を指定しない場合、コンパイラはintを想定します。

たとえば、関数を宣言して使用しない場合、コンパイラは警告を表示し、関数がintを返すと想定します。

于 2012-09-28T12:27:31.177 に答える
4

まずsizeof、関数ではなく、演算子です。関数の場合、どのように実装しますか?あなたはできません、それがポイントです。

はい、これらの修飾子のデフォルトのタイプはですint

于 2012-09-28T12:27:58.093 に答える
1

あなたのプログラムは標準Cではありません:

int a = sizeof(signed) + sizeof(unsigned);

is、ok、signedおよびint実際にはareunsignedおよび。の同義語unsigned intです。

int b = sizeof(const) + sizeof(volatile);

これらはCでは許可されていません。歴史的に、これらも解釈されることがあったかもしれませんがint、それに依存するべきではなく、コンパイラーは泣くはずです。

printf("%d",a+++b);

これは質問とは何の関係もないので、私はこれがどのように解析されるべきか、そして結果がどうあるべきかを見ることさえ拒否します。

于 2012-09-28T13:02:02.967 に答える