C语言函数未声明在头文件中,任然可以调用

在看C语言写的项目时,遇到一个很奇怪的事情:

        在*.c文件中有一个函数

                add(2,3);

        然后按照常规思路,这个函数一定会在某个头文件中声明,然后才能调用,否则它将是未声明操作而报错,实际上这里并不会报错。

现有两个代码文件

test.c:

int add(int a,int b)
{
	return a+b;
}

main.c

#include <stdio.h>

int main()
{
	printf("-------------\n");
	printf("add:=%d\n",add(3,2));
	return 0;
}

使用编译命令:

gcc main.c test.c

屏幕输出:

main.c: In function 'main':
main.c:6:21: warning: implicit declaration of function 'add' [-Wimplicit-function-declaration]
  printf("add:=%d\n",add(3,2));

得到一个a.exe文件执行该文件:

-------------
add:=5

由此可见,在C语言中,函数的声明,并不一定要声明在头文件中。但是事实一定是这样的吗?

上面,使用gcc作为主要的编译工具,众所周知,g++也支持编译C文件。

编译时,如下:

>: g++ main.c test.c
main.c: In function 'int main()':
main.c:6:21: error: 'add' was not declared in this scope
  printf("add:=%d\n",add(3,2));
                     ^~~

谜底揭开了,g++编译时直接报错,这可能也是c语言和c++之间的时代遗留问题导致。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值