dポイントプレゼントキャンペーン実施中!

現在、Cで作られたプログラムの単体テストをしています。
これを、以下のように、

・testBase.h → テストのための表示とかを作成するためのもの
・progForCheck.c → これがチェックすべきもので、この中の関数をそれぞれチェック
・add.c など → main() を含んだ、チェックを実行するためのファイル

として、以下のような感じで関数分のテストプログラムを作成してテストしようとしています。
テスト自体は問題ないのですが、この構成でコンパイルをすると、

警告 W8065 test.c 13: プロトタイプ宣言のない関数 'writeFotter' の呼び出し(関数 main )
警告 W8057 test.c 15: パラメータ 'argc' は一度も使用されない(関数 main )

という警告が出ます。後者はその通りで問題ないのですが、前者の警告は、よくわかりません。
実体は3つのファイルですが、コンパイル時にはひとつのファイルになって、既に定義されている
writeFotter() を呼んでいるだけなのに、「プロトタイプがない」という警告が出るのは、なぜなのでしょう。

それに、writeHeader() や、doCheck() は警告も無しです。
とりあえず、リンクも正常でちゃんと動作しているようなのですが、ちょっと気持ち悪いので質問しました。

// --------------- testBase.h ----------
#include <stdio.h>

int OK = 0;
int NG = 0;

void doCheck(int isOK)
{
if (isOK)
OK++;
else
NG++;
}

void writeHeader(char *title)
{
printf(" ------------ %s ------------\n", title);
}

void writeFotter()
{
printf(" OK = %d, NG = %d", OK, NG);
if (NG == 0)
printf(" ○○○○○○○○○○○○○○○○○○○\n");
else
printf(" ×××××××××××××××××××\n");
}

// ------------ progForCheck.c
int add(int a, int b)
{
return a + b;
}

int sub(int a, int b)
{
return a - b;
}

// ------------ test_add.c

#include "testBase.h"
#include "progForCheck.c"

int main(int argc, char *argv[])
{
writeHeader(argv[0]);

doCheck(add(1, 2) == 3);
doCheck(add(2, 4) == 6);
doCheck(add(8, 1) == 9);

writeFotter();
return 0;
}

A 回答 (1件)

このヘッダの使い方はおかしいでしょ、というのは置いといて



C言語なら、
> void writeFotter()
→ void writeFotter(void)
では?
    • good
    • 0
この回答へのお礼

そうでした。Cからしばらく離れていたので、void つけて、引数無しと明示しないとだめなのを忘れて悩んでいました。


ヘッダの使い方は……普通ではないです、確かに。

お礼日時:2010/12/08 21:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!