Renesas Synergy™

FAQ 105970 : Buildを行うと、エラー"samp.c 190 Error (ln30):.\samp.r30:'$func1' value is undefined"の表示が出ます。

Q: 質問

Buildを行うと、エラー"samp.c 190 Error (ln30):.\samp.r30:'$func1' value is undefined"の表示が出ます。通常参照する関数がない場合、"_func1" の様に "_" が付いた関数名が表示されますが、"$" の表示となっているのはどうしてですか。関数func1は別のファイルに存在しています。 


A: 回答

NC30WAの関数の命名規則では、以下の2種類の形式があります。

  1. 関数名の先頭に"_"が付加されている
  2. 関数名の先頭に"$"が付加されている

["_"と"$"の違い]

  • "_"の場合は、関数引数がない、もしくは引数がすべてスタック渡しである。
  • "$"の場合は、関数引数が1つでもレジスタ渡しである (NC30WAの場合、関数引数がレジスタ渡しになる条件の1つとして、その関数のプロトタイプ宣言されていることが条件です)。

[エラーメッセージから推測される原因]
func1を呼び出しているときには、$func1として呼び出していますが、関数の実体は、_func1となっていると考えます。
この原因としては、

  • 関数呼び出し部ではプロトタイプ宣言がされているが、関数実体部では、プロトタイプ宣言がされていない。

と推測します。関数がプロトタイプ宣言されているかどうかを確認してください。

[プロトタイプ宣言の確認方法]
コンパイル時にオプション-WNP、もしくは-Wallを指定すると、プロトタイプ宣言されていない関数に対してワーニングを出力します。

 

適用製品

M16Cシリーズ,R8Cファミリ用C/C++コンパイラパッケージ [M3T-NC30WA]

 

他にご質問がございましたら、リクエストを送信してください