我编写了一个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它编译成功。我可以看到,调用函数的参数数量与其实际定义不匹配。对于这种问题,编译器不会给出任何警告/错误。编译器如何报告这种类型的错误?
发布于 2015-11-19 06:32:40
这显示了C标准的一个奇怪之处。它允许诸如函数这样的实体未定义。
实际的错误是你没有
#include "test.h"在你的test.c文件中。
这意味着主文件只看到带有三个参数的函数的版本。当它到达函数调用时,它使用两个参数隐式声明函数。
当您运行它时,您会得到b的伪值。我猜超级用户的密码可能在里面;)
如果添加了include指令,则会在编译时得到一个错误。
让我担心的是,没有任何警告,甚至连-Wall -Wextra -pedantic也没有。
https://stackoverflow.com/questions/33796646
复制相似问题