C + extern声明 - 放置它们的位置

时间:2013-03-07 18:57:20

标签: c header declaration extern

好吧,我理解extern定义是如何工作的,但我不知道将它们放在哪个“最佳”位置。请考虑以下文件结构:

  • main.c / main.h / global.h
  • drv_adc.c / drv_adc.h
  • drv_pwm.c / drv_pwm.h

您可能会猜测,这对于小型微控制器来说非常常见。这两个驱动程序在硬件的不同部分上工作,没有相互依赖性。两个驱动程序都能够设置一个标志(例如:adc_irq_occured,pwm_irq_occured),表示已发生的事情,并将在main.c中处理。

现在我可以想到两种方法,我会把“extern bool adc_irq_occured;”标志。

  • drv_adc.h:它有点属于ADC驱动程序,因此我可以将它添加到其头文件中并在main.c中实例化它。
  • 我转向逻辑并将extern声明放入我的main.h(如果必须的话,则放入global.h)并在我的drv_adc.c中实例化。

现在的问题是:哪个选项是首选选项?有什么好书能让我读到这些话题吗?

1 个答案:

答案 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