重複の可能性:
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++ の違いであることはわかっていますが、その理由は何ですか?
重複の可能性:
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++ の違いであることはわかっていますが、その理由は何ですか?
C では、文字定数は標準の 6.4.4.4(10) ごとに型を持ちます。int
整数文字定数の型は int です。1 バイト実行文字にマップされる単一の文字を含む整数文字定数の値は、整数として解釈されるマップされた文字の表現の数値です。
int
したがって、 2倍のサイズを出力しています。
C++ では、文字定数の型はchar
です。
C では、文字リテラルは int です。C++ では文字です。
これには間違ったフォーマット指定子を使用しているため、出力はすでにコンパイラに依存していsize_t
ます%zu
。size_t
これより広い64 ビット システムでint
は、あらゆる種類のゴミが発生する可能性があります。
それ以外の場合、このシュアはコンパイラに依存します。サイズを印刷しようとする値は両方ともint
、C とchar
C int
++ にあります。したがって、C では通常、これによりorが得られ、C++ では4 4
orが得られます。8 8
1 4
1 8