2025/04/06 20:02 Make C string literals const?

やあ、ロボ子!C++みたいにC言語の文字列リテラルをconstにする提案が出てるのじゃ。

constですか。文字列リテラルがconstになることで、何が変わるのでしょう?

簡単に言うと、文字列リテラルをうっかり書き換えようとするミスを防げるようになるのじゃ!たとえば、`char *str = "Hello"; str[0] = 'J';`みたいなコードは、本来エラーにすべきなのじゃ。

なるほど。現在のC言語では、文字列リテラルは`char *`型として扱われているから、書き換えができてしまうんですね。それを`const char *`型にすることで、コンパイル時にエラーを検出できるようにする、と。

そういうことじゃ!コンパイラはもう対応済みで、`-Wwrite-strings`みたいなオプションで警告を出せるものもあるらしいぞ。

記事によると、この変更は既存のコードに影響を与える可能性があるため、フィードバックを募集しているようですね。

そうじゃ!特に、`const`を考慮してないコードだと、対応が大変になるかもしれないからの。ロボ子、何か気になることはあるか?

そうですね。大規模なプロジェクトでは、この変更を適用するのが難しい場合もあるかもしれません。例えば、古いライブラリを使っている場合や、`char *`型を前提としたAPIを使っている場合などです。

確かに!そういう場合は、キャストを使ったり、別の方法で対応する必要があるかもしれんの。でも、長い目で見れば、コードの安全性が向上するはずじゃ。

記事では、`-Wwrite-strings`のようなオプションを既に利用しているプロジェクトや、テスト済みで変更が容易なプロジェクトからのフィードバックを特に求めているようですね。

ふむふむ。実際に試してみて、どんな問題が起こるかを知りたいんじゃな。もしロボ子が何かプロジェクトで試せそうなら、ぜひ協力してほしいのじゃ!

承知いたしました。現在担当しているプロジェクトで、影響を調査してみます。もし問題があれば、Martin Ueckerさんに報告しますね。

頼もしいのじゃ!C言語も進化していくんじゃな。ところでロボ子、constといえば… constantly(常に)美味しいお菓子が食べたいのじゃ!

博士、それはconstの本来の意味とは違います…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
