【问题标题】:How to access Static Variable in other file without using extern in .h?如何在不使用 .h 中的 extern 的情况下访问其他文件中的静态变量?
【发布时间】:2021-08-09 02:03:46
【问题描述】:

假设文件 first.c 中有静态变量static uint8 Data_updated_u8,并且在某些循环函数中它的值正在更新。现在我想在 second.c 文件中获取 Data_updated_u8 的更新值。 有没有办法在不使用外部变量的情况下在 second.c 中获取静态变量?还是使用指针

【问题讨论】:

  • 是的,在第一个文件中编写访问器/获取 API。
  • 正如其他人所说,您将使用函数来访问它。但是您可能应该首先考虑一下您在做什么。该函数必须是全局的,那么为什么不将变量设为全局呢?在任何一种情况下,您都会遭受全局变量的不利影响,但您这样做的方式也会遭受无意义的额外麻烦。

标签: c pointers embedded


【解决方案1】:

现在我想在 second.c 文件中获取 Data_updated_u8 的更新值

这是一个设计问题。如果您在 .c 文件的文件范围内声明了本地 static 变量,则该变量将被视为私有变量。如果您的设计是合理的,其他文件不应该需要直接访问该变量。所以这是你应该退后一步,首先考虑你的程序设计的地方。

还是使用指针?

坏主意,这比使用全局变量还要糟糕。您不应该通过指针公开私有变量。你也不应该使用全局变量。总的来说,您不应该通过创建类似这样的奇怪依赖关系来设计多个文件之间的紧密耦合

如果您确实需要将该变量与其他文件共享,那么正确的方法是编写您通过头文件提供的setter/getter API 函数。然后按值设置/获取数据。 (您可能甚至不需要从外部设置它?)

另外,不要发明一些当地的车库标准uint8。使用来自 stdint.h 的国际 C 语言标准uint8_t

数据.h

#include <stdint.h>

uint8_t get_data (void);

void set_data (uint8_t val);

数据.c

#include "data.h"

static uint8_t data;

uint8_t get_data (void) { return data; }

void set_data (uint8_t val) { data = val; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2011-01-12
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多