在一个C工程文件中,如果一个函数要引用另一个文件中的函数,并不是用extern进行声明,而是在包含的头文件中进行声明

在C语言的某个工程中,一个不是主函数的函数如果引用另一个文件中的某个函数,是不是要先用extern引入?比如下面的代码:

void DisplayInit(void)
{
	
	extern void FramebufferInit(void);
	FramebufferInit();
}

在C语言中,不需要在函数内部用 extern 再次声明另一个文件中的函数。以下是原因和正确的做法:

1. extern 的默认行为

  • 在C语言中,函数的声明本身就是具有 extern 的默认属性。
  • 如果函数在另一个文件中定义了,只需要在当前文件包含一个对应的声明即可,比如通过头文件或直接在文件顶部写声明。

2. 你代码中的问题

void DisplayInit(void)
{
    extern void FramebufferInit(void); // 不需要在函数内部声明
    FramebufferInit();
}
  • 在函数内部写 extern void FramebufferInit(void); 是多余的,虽然它不会导致错误,但也没有必要。
  • 更好的做法是将 FramebufferInit 的声明放在文件顶部,或者更推荐的是通过头文件引用。

3. 正确的做法

假设 FramebufferInit 函数定义在另一个文件 framebuffer.c 中,应该这样组织代码:

1. 在 framebuffer.h 文件中声明:

#ifndef FRAMEBUFFER_H
#define FRAMEBUFFER_H

void FramebufferInit(void);

#endif // FRAMEBUFFER_H

2. 在 framebuffer.c 文件中定义:

#include "framebuffer.h"

void FramebufferInit(void) {
    // Function implementation
}

3. 在使用 FramebufferInit 的文件中包含头文件:

#include "framebuffer.h"

void DisplayInit(void) {
    FramebufferInit();
}

4. 为什么推荐使用头文件

  • 避免重复声明函数,方便管理。
  • 保证声明和定义的一致性,减少维护难度。
  • 编译器会对头文件中的声明进行检查,提高代码的健壮性。

总结

在函数内部使用 extern 不是正确的做法,函数声明应放在文件顶部或通过头文件进行管理。如果 FramebufferInit 来自其他文件,直接包含其声明即可。

经实测,像下面这样写编译是没有问题的:
在这里插入图片描述
在这里插入图片描述

扩展阅读:
详解C语言中的关键词:extern以及它需要注意的事项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昊虹AI笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值