5
C ++標準では、初期化されていないブールがプログラムをクラッシュさせることを許可していますか?
C ++の「未定義の動作」により、コンパイラーが必要なことをほとんど実行できることがわかっています。しかし、コードが十分に安全であると思っていたので、驚いたクラッシュがありました。 この場合、実際の問題は、特定のコンパイラを使用する特定のプラットフォームでのみ、最適化が有効になっている場合にのみ発生しました。 問題を再現し、それを最大限に簡略化するために、いくつかのことを試みました。Serializeこれはと呼ばれる関数の抜粋です。これはboolパラメータを取り、文字列trueまたはfalse既存の宛先バッファにコピーします。 この関数はコードレビューに含まれますか?実際には、ブールパラメーターが初期化されていない値である場合にクラッシュする可能性があることを伝える方法はありませんか? // Zero-filled global buffer of 16 characters char destBuffer[16]; void Serialize(bool boolValue) { // Determine which string to print based on boolValue const char* whichString = boolValue ? "true" : "false"; // Compute the length of the string we selected const size_t len = strlen(whichString); …