関数宣言がない場合のリンカワーニング
テクニカル・ノート 95495
アーキテクチャ:
ARM, RH850, RX, SH, STM8, RL78
コンポーネント:
general
更新日:
2018/08/26 3:47
はじめに
ユーザからの状況説明: いくつかの関数を宣言するのを忘れてしまいました。そのため、関数の定義と同関数の呼び出しにおいて、誤って異なるパラメータを指定してしまいました。アプリケーションでは、検出が困難なランタイムエラーが発生します。
質問:
なぜIAR ILINKリンカで警告が表示されないのでしょうか?
背景
- この問題/リスクは、暗黙的な宣言を使用したとき(コンパイル単位で宣言していない場合)に発生します。
- この問題は、コンパイラやリンカによって使用されるELF形式に関する制約によるものです。この制約は、(一部のIAR Embedded Workbench製品で使用されている) UBROF出力形式では存在しません。
- IARは、ELFに関するこの制約について認識しています。
- 当面、IAR ILINKリンカにこの類のチェックを導入する予定はありません。
解決方法
コンパイラがこの問題を検出できるように、以下のオプションを有効にしてください。
プロジェクト(Project) > オプション(Options) > C/C++コンパイラ(C/C++ Compiler) > 言語1(Language 1) > Cの派生言語(C dialect) > プロトタイプの強制(Require prototypes)
コンパイラのコマンドラインでは、以下のオプションを使用します。
--require_prototypes
その後、関数の宣言が記述されたヘッダファイルを作成し、関数を定義または呼び出す際は必ずそのファイルを使用してください。
全ての製品名は、それぞれの所有者の商標または登録商標です。