書いたプログラムをコンパイルに通すと関数に似たマクロ呼び出し '' の引数が不足しています
という警告が表示されることがあります。
警告ですのでほかのエラーがない限りコンパイルエラーが発生することはありませんが、プログラムの書き方にミスがあるということには間違いありません。
ここでは、なぜC4003警告が表示されてしまうのか、そしてその対処法を解説します。
目次から探す
C4003警告の意味
C4003警告の説明文「関数に似たマクロ呼び出し ” の引数が不足しています」を読むとだいたい想像できると思いますが、マクロが受け取る引数の数に対して、呼び出し時に指定した引数が少ないことが原因で発生する警告です。
論より証拠ということで、C4003警告が出るサンプルを見てみましょう。
#define sum(a,b) a+b;
int main()
{
int a = 10;
int b = 20;
int total = sum(a);
}
このプログラムでは、sumというマクロ関数を定義していますが、sumマクロ関数を呼び出している7行目に注目してください。
定義したsumマクロ関数は2つの引数を受け取るように定義されていますが、呼び出し時には1つしか引数を与えていません。
これが原因で、マクロ関数の呼び出し時に引数が不足しているという警告が出てしまうのです。
基本的にはほかのエラーも同時に発生する
引数不足が発生すると、ほとんどの場合は構文エラーでコンパイルエラーになります。
慣れてくるとコンパイルエラーが出た時点で気づけますが、万が一警告しか出なかった場合は呼び出し時の引数設定を間違えていないかチェックするようにしましょう。
また、指定した引数が多すぎても警告が出てしまうのでそちらも注意してください。
【C/C++】C4002「関数に似たマクロ呼び出し ‘sum’ の引数が多すぎます」の対処法
C言語・C++のプログラムを書いていて、C4002警告に遭遇したことはありませんか? コンパイルエラーではなく警告であるため、問題なくビルドできて実行もできるわけです…