我编写了一个C程序,下面给出了同一目录中的三个文件
的main.c
#include<stdio.h>
#include "test.h"
int main()
{
int b=0;
b = test_add(3,2);
printf("Added: b=%d\n\n",b);
return 0;
}
test.h
int test_add(int a, int b);
test.c的
int test_add(int a, int b, int c)
{
return a+b+c;
}
我正在使用以下命令编译程序:
$gcc -Wall -Wextra main.c test.c
它成功编译。我可以看到调用函数及其实际定义的参数数量不匹配。编译器不会对此类问题给出任何警告/错误。如何通过编译器报告此类错误?
答案 0 :(得分:4)
这显示了C标准的一个奇怪之处。它允许函数等实体未定义。
实际错误是你没有
#include "test.h"
在你test.c
档案中。
这意味着主文件只能看到具有三个参数的函数版本。当它到达函数调用时,它会隐式声明具有两个参数的函数。
当你运行它时,你会得到b
的伪造值。我猜测超级用户的密码可能会以某种方式存在;)
如果添加include指令,则在编译时会出错。
让我担心的是,没有警告,甚至没有-Wall -Wextra -pedantic
。