W0520546:初期化されないパスがあります。:種別"シンボル名"(宣言位置 行行番号)

割り込み関数の中でswitch文を書いたら、

switch文の制御式の変数に、以下の警告が出たのですが、どう直せばいいのでしょうか。

W0520546:初期化されないパスがあります。:種別"シンボル名"(宣言位置 行行番号)

開発環境はe2studio v6.30で、使用マイコンはRX231です。

Parents
  • わわいです
    switch文で変数に値を代入しているものと思われますが、その中で代入しない処理があると思われます
    あるあるなのが、defaut:を指定してないために代入されない場合が出てくるということですね。

    ということで、このワーニングを潰すためには、switchのすべての場合に値が代入されるようにする、あるいは、最初にその変数に予め何らかの値を代入しておく、
    ということをすれば、それはでてこなくなります。

    #しかし、ワーニングが出ないからといってバグがない、ということにはならないので注意を。
  • わわい様
    ありがとうございます。
    caseの中では全て代入させました。
    >最初にその変数に予め何らかの値を代入しておく、
    ここができていないから、なのかなと思います。
    制御式の変数は関数の外で宣言しましたが、そこで0を代入しています。
    以下のように記述しています。
    まだ警告は消えていません。代入が漏れてないかもう少しよく見てみます。

    int var = 0;
    static void interrupt (void)
    {
    switch (var)
    {
    case 0:

     var = 1;
    break;
    case 1:

     var = 2
    break;
    case 2:

     var = 0;
    break;
    default:

     var = 0;
    break;
    }
    }
  • わわいです
    警告がまだ出ている、ということは、まだ代入していないパスが残っている、ということなので頑張ってみてみましょう
    代入する前にif文でbreakしているとか、if文で代入してるんだけど、else節では抜けてた、というのがあるあるだったりします
  • わわい様ありがとうございます。
    caseの中でif/elseを書いていました。あるあるの通りでした。
    昨日まではその記述漏れを潰しても、警告が消えなかったのですが、
    再起動させた今日は警告が出なくなりました。
    きっと代入漏れだったのではと思いますが、警告内容を全て読んでいないことが分かりましたので、
    NoMaY様の訂正もしておきました。
Reply
  • わわい様ありがとうございます。
    caseの中でif/elseを書いていました。あるあるの通りでした。
    昨日まではその記述漏れを潰しても、警告が消えなかったのですが、
    再起動させた今日は警告が出なくなりました。
    きっと代入漏れだったのではと思いますが、警告内容を全て読んでいないことが分かりましたので、
    NoMaY様の訂正もしておきました。
Children
No Data