未使用変数・関数がある場合にwarningメッセージを表示させたい

未使用変数,関数がある場合に warningメッセージを表示することは可能でしょうか?
ご教示いただけますと幸いです。

【環境】
IDE CS+
ビルド・ツール CC-RL

Top Replies

Parents
  • onotさん、こんにちは。NoMaYです。#お久しぶりです。

    以前に他の人にリプライしたスレッドがあるのですが、CC-RLでワーニングレベルを上げることが出来るのは以下の点に関してのみで、未使用変数や未使用関数に対してワーニングを出すようにすることは出来ないです。ちなみに、コンパイラ/リンカの最適化オプションには未使用変数や未使用関数をリンクしないというオプションがあるのと(ただし、完璧に未使用なものをリンクしないようになっているかと、ちょっと何とも言えない印象はありますが)、リンカのメッセージオプションで未使用変数や未使用関数を表示させるということが出来るようになっています。

    他方で、CC-RXやGCCやIARコンパイラでは、コンパイル時に、static変数やstatic関数に関しては、未使用変数や未使用関数に対してワーニングを出すようにすることが出来ますが、あくまでもstatic変数やstatic関数に関してであり、グローバル変数やグローバル関数に関してはワーニングを出すことは出来ないです。あと、コンパイラの最適化レベルの設定によって、CC-RLも含めてどのコンパイラでも、未使用のstatic変数や未使用のstatic関数はコンパイル時に最適化機能によって削除されるようにすることが出来ます。

    CS+やe2studioのコンパイル設定
    community-ja.renesas.com/cafe_rene/forums-groups/tools/f/forum21/6333/cs-e2studio/35087#35087

    ●CC-RL

    自分が認識している範囲ですと -refs_without_declaration がこのカテゴリのものですね。(正確には、ワーニングにするかどうかでは無く、エラーにするかどうかの設定になりますけれども。) ヘルプでは、コンパイラ編→コマンドリファレンス→オプション→コンパイルオプション→機能拡張のグループ分けの下にあります。

    宣言がない関数を呼び出す場合,または古いスタイル(K&R)の宣言が書かれた関数呼び出しをエラーとします。

    [指定形式]
    -refs_without_declaration
    - 省略時解釈
      宣言がない関数を呼び出す場合,または古いスタイル(K&R)の宣言が書かれた関数を呼び出す場合にメッセージを出力しません。
    [詳細説明]
    - 宣言がない関数を呼び出す場合,または古いスタイル(K&R)の宣言が書かれた関数を呼び出す場合にエラーとします。



    [関連リンク]

    C言語の引数
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rl78/f/forum18/6433/c

    その機能は、CC-RXにはありますが、CC-RL(とCC-RH)には無いのです。そして、CC-RXで検出されていても、今回は、RL78とCC-RLでのことなのです。この3種類のコンパイラは、必ずしも同一の仕様という訳ではなくて、C言語拡張仕様やコマンドラインオプションがそれなりにばらついています。そして、ワーニングレベルに関しては、CC-RXが最も高い設定が出来るような感じになってますね。


    CC-RXの未使用の変数/関数を削除する最適化の効き目がGNURX/ICCRXより歴然と弱いのですが、、、
    community-ja.renesas.com/cafe_rene/forums-groups/tools/f/forum21/6403/cc-rx-gnurx-iccrx

    リンカにインフォメーションメッセージでunused symbolを表示させたところ、以下のようなdeleteされたシンボルのリストが表示されたのですが、それでもずっと沢山のunusedシンボルのリストが表示されました。直感的に、なぜunusedシンボルが残っているのか(deleteされていないのか)不思議な気がするのです、、、(その一方で、_Except_Vectorsや_Reset_Vectorがunusedになっているのも不思議ですが、、、)


  • NoMaYさん

    ありがとうございます。
    未使用変数や未使用関数に対して,ワーニング表示できないことを理解しました。

    ソースコードをgccコンパイラに食わせるプランを試したいと思います。
    -Wallオプションをつければ,未使用変数があった場合にワーニングを出してくれるので。


    また,教えていただいた「-refs_without_declaration」オプションを試しました。
    宣言が無い変数を呼び出すと,たしかにワーニングではなくエラーで知らせてくれますね。
     
     プロジェクト・ツリー
      「CC-RL(ビルド・ツール)」
       「コンパイルオプション」タブ
         その他
          「そのほかのオプション」に「-refs_without_declaration」を追記

Reply
  • NoMaYさん

    ありがとうございます。
    未使用変数や未使用関数に対して,ワーニング表示できないことを理解しました。

    ソースコードをgccコンパイラに食わせるプランを試したいと思います。
    -Wallオプションをつければ,未使用変数があった場合にワーニングを出してくれるので。


    また,教えていただいた「-refs_without_declaration」オプションを試しました。
    宣言が無い変数を呼び出すと,たしかにワーニングではなくエラーで知らせてくれますね。
     
     プロジェクト・ツリー
      「CC-RL(ビルド・ツール)」
       「コンパイルオプション」タブ
         その他
          「そのほかのオプション」に「-refs_without_declaration」を追記

Children
No Data