C と C における文字列リテラルから 'char*' への変換
C 11 標準では、文字列リテラルを 'char*' に変換すると明示的に規定されています。 'char*' は無効ですが、C では引き続き有効です。この相違は、2 つの言語の文字列の処理方法の根本的な違いに起因します。 literals.
C C での互換性
歴史的に、C では文字列リテラルから 'char' への非推奨の暗黙的な変換が許可されていました。ただし、C 11 では、この変換は正式に削除され、文字列リテラルは「char const 」として扱われるようになりました。これにより不変性が確保され、未定義の動作を引き起こす可能性のある変更が防止されます。
C での明示的なキャスト
C では暗黙的な変換は使用できなくなりましたが、C では明示的なキャストを行うことができます。 「char」は引き続き実行できます。ただし、これでは不変性の根本的な問題は解決されません。文字列リテラルからキャストされた 'char' が指す値を変更しても、未定義の動作が発生します。
C の安全第一
文字列リテラルの型 ('char const *') が正しい場合、C は安全性を優先します。リテラルを変更しようとするとエラーとしてフラグが立てられ、クラッシュの可能性が排除されます。
C のレガシー コード
C は、暗黙的なコードに依存する既存のコードとの互換性を維持します。文字列リテラルから「char*」への変換。この決定は、おそらくレガシー ソフトウェアの破壊を避けるために行われたと考えられます。ただし、互換性と安全性のバランスに関して、C と C の哲学の違いが浮き彫りになります。
要約すると、文字列リテラルから 'char' への変換は、C では無効です。不変の原則。 C では従来の理由からこの変換が許可されていますが、安全性を高めるために 'char const ' を使用することは強く推奨されません。
以上が文字列リテラルの `char*` への変換が C では無効であるのに、C では許可されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。