1

好吧,我了解 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 中实例化它。

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

4

1 回答 1

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 文件,为了更清楚,请阅读此讨论,将变量放在头文件与将变量放在 source 中

于 2013-03-07T19:02:20.320 回答