首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GCC的无参数校验

GCC的无参数校验
EN

Stack Overflow用户
提问于 2015-11-19 06:23:47
回答 1查看 532关注 0票数 4

我编写了一个C程序,它包含在同一个目录下的三个文件

main.c

代码语言:javascript
运行
复制
#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

代码语言:javascript
运行
复制
int test_add(int a, int b);

test.c

代码语言:javascript
运行
复制
int test_add(int a, int b, int c)
{
        return a+b+c;
}

我正在使用以下命令编译程序:

代码语言:javascript
运行
复制
$gcc -Wall -Wextra main.c test.c

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-19 06:32:40

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

实际的错误是你没有

代码语言:javascript
运行
复制
#include "test.h"

在你的test.c文件中。

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

当您运行它时,您会得到b的伪值。我猜超级用户的密码可能在里面;)

如果添加了include指令,则会在编译时得到一个错误。

让我担心的是,没有任何警告,甚至连-Wall -Wextra -pedantic也没有。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33796646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档