gpt4 book ai didi

c - GCC 中没有参数检查

转载 作者:太空狗 更新时间:2023-10-29 15:32:09 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com