好吧,我理解extern定义是如何工作的,但我不知道将它们放在哪个“最佳”位置。请考虑以下文件结构:
您可能会猜测,这对于小型微控制器来说非常常见。这两个驱动程序在硬件的不同部分上工作,没有相互依赖性。两个驱动程序都能够设置一个标志(例如:adc_irq_occured,pwm_irq_occured),表示已发生的事情,并将在main.c中处理。
现在我可以想到两种方法,我会把“extern bool adc_irq_occured;”标志。
现在的问题是:哪个选项是首选选项?有什么好书能让我读到这些话题吗?
答案 0 :(得分:1)
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
声明放入要包含在其他文件中的标头中。这是因为我们声明一次,告诉编译器只有标志变量的一个公共版本可用于我们包含在标头中的drv文件,更清晰,请阅读此讨论,Difference between putting variables in header vs putting variables in source。