プログラミングとかブログ

Unity/C#/SRPGStudio/RPGツクールMVの情報とかその他気になったことを調べて書きます。

Unityでよく出る警告CS0168 CS0414 CS0649の意味

Unityでよく出る(自分がよく出す)警告の意味を調べてみました。
まあUnityというかVisualStudioの警告なんですが、Unityだと英語で表示されるので、
パッと見わかりにくいんですよね。

CS0168:変数未割り当て
Assets/Test.cs(9,13): warning CS0168: The variable `value' is declared but never used

CS0168は以下のコードで発生します。
変数valueが宣言だけされていますが、それ以降どこにも使っていません。
未使用の変数があると無駄な処理が発生するので警告しているわけです。

public class Test : MonoBehaviour
{
    void Start()
    {
        //変数が宣言だけされているが、どこにも使っていない
        int value;
    }
}


CS0414:変数が割り当てられているが未使用

Assets/Test.cs(7,17): warning CS0414: The private field `Test.value' is assigned but its value is never used

CS0414は以下のコードで発生します。
ただしこの警告が発生するのはprivate変数だけです。
protectedやpublicの場合どこかで使われてるかもしれないので警告は出しません。
下記コードではvalueが0で初期化されています。
しかし、それ以外ではどこにも使用されていません。
これも無駄な処理になるので警告しているようです。

public class Test : MonoBehaviour
{
    private int value = 0;

    void Start()
    {
        //valueは値が代入されているが使用されていない
    }
}


CS0649:変数が未割り当てで初期値はxxx
Assets/Test.cs(6,11): warning CS0649: Field `Test.nums' is never assigned to, and will always have its default value `null'

CS0649は以下のコードで発生します。
以下のコードではint配列numsを宣言だけして、Lengthプロパティを参照しています。
numsに値が入っていないのに参照するとnumsの初期値を参照します。
警告ではこの場合の初期値がnullだと言っています。
当然このままだとnull参照エラーになりますので直せというわけです。
要するに「このままだと初期値を使うけどいいの?」みたいな意味のようです。

public class Test : MonoBehaviour
{
    int[] nums;

    void Start()
    {
        //numsに値が割り当てられていないから初期値を参照する
        //この場合nullを参照してしまう
        int i = nums.Length;
    }
}


参考
コンパイラの警告 (レベル 3) CS0168
コンパイラの警告 (レベル 3) CS0414
コンパイラの警告 (レベル 4) CS0649