C语言函数调用的一个问题总结

这几天看代码时遇到个比较小白的函数调用问题,这里记录一下。

一 函数调用

下面列举一下c语言函数调用的2种写法。

常规写法

假如我们有个main.c文件,main()函数位于其中,main()函数里调用了func(),而func()是在module.c里定义的。通常我们会写个module.h,然后在这个点h文件里对func()进行声明,最后main.c里include这个module.h,这样main()函数就可以正常调用func()了。

main.c如下

#include <stdio.h>
#include "module.h" // key

int main(void)
{
	func();
	
	printf("hello world\n");
	
	return 0;
}

module.h如下,

#ifndef _MODULE_H_

void func(void);

#endif

module.c如下,

#include <stdio.h>

void func(void)
{
	printf("Now is inside %s().\n", __func__);
}

没有头文件的写法

另外一种写法是不使用头文件,只要main.c和module.c。其写法如下,

main.c如下,

#include <stdio.h>

extern void func(void); // 直接声明所需要的函数

int main(void)
{
	func();
	
	printf("hello world\n");
	
	return 0;
}

module.c和上面的一样,没有变化,

#include <stdio.h>

void func(void)
{
	printf("Now is inside %s().\n", __func__);
}

二 解释

C语言支持分离编译。对于上节常规写法,我们在生成可执行文件时,是按照下面这个步骤做的

  1. gcc -c main.c -o main.o
  2. gcc -c module.c -o module.o
  3. gcc -o main main.o module.o

对于第一步,gcc会在main.c里会把#include "module.h"替换为module.h里的内容,这一步基本等价于上节的第二种写法(没有头文件)。

所以没有头文件的写法也可以达到相同效果,只是不规范。如果module.c里定义了很多函数且main()里都要用,或者其它模块里的函数也要调用module.c里定义的函数,那么上述没有头文件的写法就显得比较臃肿了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值