🙄

1行関数は書かないほうが良い

2023/03/17に公開

C++、Visual Studioの話です。

問題点

int sum(int a, int b) { return a + b; } // こいつ

class Array
{
public:
    void SetValue(int value) { value_ = value; } // こいつ
    int value_;
};

関数行にブレークポイントを貼っても情報が取得できないです。止まりはしますがその段階ではまだ引数もthisの初期化?も済んでいないため全くもって情報が読み取れません。

これはArray::SetValue関数にブレークポイントを貼った場合のウォッチです。
実際はvalue_は0ですが見れませんし、引数も1234を渡してますが確認できません。

これが結構厄介で、バグ調査している中で関数にブレークポイントを貼って値を確認するというのは王道的手段でよくやることです。それが機能しないというのはとても面倒なのです。

解決策

改行して、処理にブレークポイントを貼れるようにしてください。

int sum(int a, int b)
{
    return a + b; // ここにブレークポイントを置えばウォッチ可能
}

class Array
{
public:
    void SetValue(int value);
    int value_;
};

// 宣言と一緒に書いてもいいけど外出ししたほうが見やすい
inline void Array::SetValue(int value)
{
    value_ = value; // ここにブレークポイントを置えばウォッチ可能
}

C++の場合、宣言と定義を分ける書くのはちょっと面倒、とはいえ宣言の中で改行して関数を書くのもちょっとダサいからという理由で一行関数を書く誘惑に襲われがちですが、後々困るので手間を惜しまず書いていくのが良いです。

Discussion