5日連続で2つのビッグセール開催中!

【C/C++】E0140・C4020「関数呼び出し引数が多すぎます」の対処法

2 min

プログラムをコンパイルするとE0140コード(C4020「関数呼び出し引数が多すぎます」と表示されてコンパイルエラーになることがあります。

初心者に限らずプログラミングに慣れている方でもやってしまいがちな問題ですので、発生原因や解決方法を見ていきましょう。

C4020・E0140の原因

C4020警告およびE0140エラー「関数呼び出しの引数が多すぎます」はエラーメッセージの通り、定義されている関数の引数よりも多い引数を指定していることが原因です。

例えば以下のコードはプロトタイプ宣言されている関数よりも引数が多いためエラーまたは警告が表示されます。

void f(int);
int main() {
   f(1,2);   // C4020・E0140
}

このエラーを解消したい場合は引数の数を正しい数に修正してください。

上記コードなら3行目の第2引数を削除するとエラーが解消されます。

なぜC4020が起こるのか

引数の数を間違えた覚えがないのにエラーや警告が表示されてしまうことがあるでしょう。

なぜC4020コード・E0140エラーが発生してしまうのか解説します。

関数の仕様を変更した

既に書いていた関数の仕様変更して引数の数の変更した場合、既に関数を呼び出していたところでエラーが発生してしまうことがあります。

引数の変更を含む関数の仕様変更を行った場合は関数呼び出しのコードも修正するようにしてください。

カンマとピリオドを間違えた

関数に引数として小数リテラル値を渡す場合、カンマとピリオドを間違えてしまうことがあります。

int func(int a){
    return a * 2;
}
int main(){
    func(3,14); //3.14と入力しようとして間違えている
}

カンマとピリオドは隣同士のキーであり、キーボード配列的にやってしまいがちなミスですので気をつけるようにしてください。

見つかり次第修正するように

昔は警告を発するだけでしたが、最新のVisual Studioではエラー扱いでコンパイルに失敗するようになっています。

ですので引数の数は絶対に間違えないようにしましょう。引数の数を間違えていた場合は、カンマとピリオドを間違えていないか、確認するようにしてください。

このエラーコードではないですが、プロトタイプ宣言の仮引数と実装部分の引数を間違えてしまうことも珍しくないので引数についてはしっかり確認するようにしましょう。