gpt4 book ai didi

C + 外部声明 - 将它们放在哪里

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:17 25 4
gpt4 key购买 nike

好吧,我明白外部定义是如何工作的,但我不知道放置它们的“最佳”位置是什么。考虑以下文件结构:

  • 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com