【C/C++】C4002「関数に似たマクロ呼び出し ‘sum’ の引数が多すぎます」の対処法

C言語・C++のプログラムを書いていて、C4002警告に遭遇したことはありませんか?

コンパイルエラーではなく警告であるため、問題なくビルドできて実行もできるわけですが、この警告が出る場合プログラムの書き方を間違えています。

ここではC4002エラーの正体と解決方法について解説します。

C4002警告とは?

C4002エラーはマクロ関数呼び出しに関する警告で、コンパイルには影響がないものの書き方は間違っている際に表示されます。

 
#include <iostream>
#define sum(a) a+a;
int main()
{
        std::cout << sum(10,20);
}
クリップボードにコピーする

このプログラムはC4002警告が出てしまう間違ったコードですが、何が問題かわかるでしょうか?

答えは5行値のsumマクロ関数呼び出し時に指定している引数が多すぎることが原因です。

このコードで作成しているsum関数は、引数を1つしか受け取らないにもかかわらず、5行目の呼び出し時には2つの引数が指定されています。

その影響で警告が出てしまうのです。

なぜコンパイルエラーにならないのか

理由は簡単。コンパイル時に無視されているからです。

マクロ関数というのはコンパイル時に展開されますが、不必要な引数は無視されるので、コンパイルに影響がないのです。

 
#include <iostream>
#define sum(a) a+a;
int main()
{
        //std::cout << sum(10, 20);
        //↑のsum関数展開後のコード
        std::cout << 10+10;
}
クリップボードにコピーする

そのためコンパイルエラーにはなりませんが、書き方を間違っているのはまずいということでC4002エラーが表示されるようになっています。

ですので、「C4002警告=マクロ関数呼び出しを間違えている」と覚えておくと良いでしょう。

【ピックアップ】C++プログラマ必読書

おすすめ度 5
対象読者 C++でHello Worldプログラムを書いたことがあるレベル~
読破して得られるもの 実用レベルのC言語・C++スキル習得

C++プログラマを目指す方なら必ず読んでおきたい一冊です。

ただただ関数の使い方を学ぶだけではちゃんとしたソフトウェア開発することは困難です。ですがこの参考書は、外部ライブラリを組み込んでチャットボットを作成するといった、実用レベルのスキルを身につけることができます。

よくあるプログラミング入門書だと、文法やかんたんな関数の紹介、ファイルを操作するだけで終わっていることが少なくありません。

こちらの一冊は基礎から応用までたくさんのことが解説されているため、とんでもない大ボリュームですが、この参考書読破できた頃にはソフトウェアの開発ができる実用レベルのC++スキルが習得できているでしょう。

コメント

タイトルとURLをコピーしました