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