我写了一个 C 程序,它由下面给出的三个文件组成,位于同一目录中
主.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;
}
测试.h
int test_add(int a, int b);
测试.c
int test_add(int a, int b, int c)
{
return a+b+c;
}
我正在使用以下命令编译程序:
$gcc -Wall -Wextra main.c test.c
编译成功。我可以看到调用函数的参数数量与其实际定义不匹配。编译器不会针对此类问题给出任何警告/错误。编译器如何报告此类错误?
最佳答案
这显示了 C 标准的一个奇怪之处。它允许未定义函数等实体。
真正的错误是你没有
#include "test.h"
在你的 test.c
文件中。
这意味着主文件只能看到带有三个参数的函数的版本。当它到达函数调用时,它隐式地声明了带有两个参数的函数。
当您运行它时,您会得到 b
的虚假值。我猜 super 用户的密码可能以某种方式在那里;)
如果添加 include 指令,编译时会出错。
让我担心的是,没有警告,即使使用 -Wall -Wextra -pedantic
也没有。
关于c - GCC 中没有参数检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33796646/