21

重複の可能性:
C/C++ の文字 ('a') のサイズ

次のプログラム

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof('\0'));
    printf("%d\n", sizeof(0));
}

gcc 出力でコンパイル

4
4

そしてg ++で

1
4

なぜこうなった?これはコンパイラの問題ではなく、C と C++ の違いであることはわかっていますが、その理由は何ですか?

4

4 に答える 4

35

C では、文字定数は標準の 6.4.4.4(10) ごとに型を持ちます。int

整数文字定数の型は int です。1 バイト実行文字にマップされる単一の文字を含む整数文字定数の値は、整数として解釈されるマップされた文字の表現の数値です。

intしたがって、 2倍のサイズを出力しています。

C++ では、文字定数の型はcharです。

于 2012-07-25T10:10:02.240 に答える
12

\0文字リテラルはintC では として扱われるため、実際にはのsizeof(int)代わりに出力することになりますsizeof(char)

ideone同じ結果が得られます ( CC++ )。

于 2012-07-25T10:05:45.957 に答える
4

C では、文字リテラルは int です。C++ では文字です。

于 2012-07-25T10:06:30.633 に答える
0

これには間違ったフォーマット指定子を使用しているため、出力はすでにコンパイラに依存していsize_tます%zusize_tこれより広い64 ビット システムでintは、あらゆる種類のゴミが発生する可能性があります。

それ以外の場合、このシュアはコンパイラに依存します。サイズを印刷しようとする値は両方ともint、C とcharC int++ にあります。したがって、C では通常、これによりorが得られ、C++ では4 4orが得られます。8 81 41 8

于 2012-07-25T16:54:07.307 に答える