GCC中没有参数检查

时间:2015-11-19 06:23:48

标签: c gcc

我编写了一个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

它成功编译。我可以看到调用函数及其实际定义的参数数量不匹配。编译器不会对此类问题给出任何警告/错误。如何通过编译器报告此类错误?

1 个答案:

答案 0 :(得分:4)

这显示了C标准的一个奇怪之处。它允许函数等实体未定义。

实际错误是你没有

#include "test.h"

在你test.c档案中。

这意味着主文件只能看到具有三个参数的函数版本。当它到达函数调用时,它会隐式声明具有两个参数的函数。

当你运行它时,你会得到b的伪造值。我猜测超级用户的密码可能会以某种方式存在;)

如果添加include指令,则在编译时会出错。

让我担心的是,没有警告,甚至没有-Wall -Wextra -pedantic