好吧,我明白外部定义是如何工作的,但我不知道放置它们的“最佳”位置是什么。考虑以下文件结构:
- main.c/main.h/global.h
- drv_adc.c/drv_adc.h
- drv_pwm.c/drv_pwm.h
您可能会猜到,这对于小型微 Controller 来说很常见。这两个驱动程序在硬件的不同部分工作,并且没有相互依赖性。两个驱动程序都能够设置一个标志(例如:adc_irq_occured、pwm_irq_occured),指示发生了某些事情并将在 main.c 中处理。
现在我可以想到两种方法来放置“extern bool adc_irq_occured;”旗帜。
- drv_adc.h:它有点属于 ADC 驱动程序,因此我可以将它添加到它的头文件中并在 main.c 中实例化它。
- 我扭转逻辑并将外部声明放入我的 main.h(或 global.h,如果必须如此)并在我的 drv_adc.c 中实例化它。
现在的问题是:哪个选项是这里的首选选项?有什么好书可以让我读到这些主题吗?
最佳答案
In main.c:
int flag = 0;
In main.h:
extern int myGlobal;
In drv_adc.c:
#include "main.h"
In drv_pwm.c:
#include "main.h"
既然变量是全局变量,它的安全性较低,因此请谨慎使用它,并确保任何其他 drv 文件不会篡改它。
-- 编辑-- 为什么不反过来呢?
我们将 extern
declaration 放在要包含在您的其他文件中的 header 中。这是因为我们声明它一次,告诉编译器只有 一个通用版本 标志变量可用于我们包含在 header 中的两个 drv 文件,因为阅读此讨论更清晰,Difference between putting variables in header vs putting variables in source .
关于C + 外部声明 - 将它们放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15279453/