ホームページ >バックエンド開発 >C++ >C では `sizeof('a')` が整数のサイズを返すのに、C では返さないのはなぜですか?

C では `sizeof('a')` が整数のサイズを返すのに、C では返さないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-23 14:02:10606ブラウズ

Why Does `sizeof('a')` Return the Size of an Integer in C, but Not in C  ?

C の Sizeof('a') が C と異なる理由

プログラミングの領域では、データ型はデータ型を決定する上で重要な役割を果たします。データのサイズと特性。効率的かつ正確なプログラミングには、異なるデータ型間のニュアンスを理解することが不可欠です。そのような違いの 1 つは、文字リテラルの表現において C と C の間に存在します。

質問: C の文字リテラルはなぜ整数なのでしょうか?

C では、 sizeof(' a') は 1 と評価され、これは文字変数 (char) のサイズに対応します。これは、文字リテラルは単一文字のスペースを占有するべきであるという直感的な概念と一致します。

しかし、C では、sizeof('a') は驚くべきことに整数 (int) のサイズを返します。この一見直観に反する動作は、次のような疑問を引き起こします: なぜ C の文字リテラルは整数として扱われるのでしょうか?

歴史的洞察: C の進化

この特殊性を解明するために、次のようにします。 Cの歴史を深く掘り下げる必要があります。ブライアン・カーニハンとデニスによって開発されたオリジナルのK&R Cリッチーは、基本的な特性を持っていました。まず文字値を整数に昇格しないと文字値を利用するのは困難でした。

この制限は、C の算術演算子が同じ型のオペランドを期待しているという事実に由来しています。文字と整数は別個の型であるため、式でこれらを混合するには、文字を整数に明示的に変換する必要がありました。

実用的な解決策: 文字表現の統一

この不便さを考慮して、C 言語の設計者は実用的なアプローチを採用しました。文字を整数に強制するための追加ルールを導入する代わりに、最初から文字定数を整数にすることで区別を排除しました。これにより、言語が簡素化され、エラーが発生しにくくなりました。

複数文字の定数: 過去の遺物

この設計上の決定に寄与したもう 1 つの歴史的要因は、複数文字の定数の存在。これらの定数は、一重引用符で囲まれた一連の文字 (例: 「abcd」) で示され、古いバージョンの C で広く使用されていました。文字定数を整数にできるようにすることで、文字定数を整数のサイズに収めることができ、両方の文字定数に一貫した表現が提供されました。単一文字と複数文字の定数。

結論

したがって、 C 文字リテラルが整数であるという一見異常な動作は、その言語の歴史的進化にそのルーツがあることがわかります。シンプルさと効率性の追求により、言語の後のバージョンでより洗練された型システムが導入されたにもかかわらず、この設計が選択され続けてきました。

以上がC では `sizeof('a')` が整数のサイズを返すのに、C では返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。