C と C++ に複数文字リテラルが存在するのはなぜですか? 質問する

C と C++ に複数文字リテラルが存在するのはなぜですか? 質問する

CとC++ではmulticharacter literal: 'c' ではない (型整数C言語と文字C++では「tralivali」(型整数!)

enum
{
    ActionLeft = 'left',
    ActionRight = 'right',
    ActionForward = 'forward',
    ActionBackward = 'backward'
};

スタンダードは言う:

C99 6.4.4.4p10: 「複数の文字 (例: 'ab') を含む整数文字定数の値、または 1 バイト実行文字にマップされない文字またはエスケープ シーケンスを含む整数文字定数の値は、実装定義です。」

私は、それらが広く使われていることを発見しましたC4エンジンしかし、プラットフォームに依存しないシリアル化について話しているとき、それらは安全ではないと思います。文字列のように見えるため、混乱を招くこともあります。では、マルチ文字リテラルの使用範囲はどこでしょうか。何かに役立つのでしょうか。C++ では、C コードとの互換性のためだけに使用されているのでしょうか。行くオペレーターか否か?

ベストアンサー1

メモリ ダンプ内の値を簡単に選択できるようになります。

例:

enum state { waiting, running, stopped };

enum state { waiting = 'wait', running = 'run.', stopped = 'stop' };

次のステートメントの後のメモリ ダンプ:

s = stopped;

次のようになります:

00 00 00 02 . . . .

最初のケースでは、

73 74 6F 70 s t o p

複数文字のリテラルを使用します。(もちろん、'stop' と表示されるか 'pots' と表示されるかはバイト順序によって異なります)

おすすめ記事