Допустим, в файле first.c есть статическая переменная static uint8 Data_updated_u8
, и в какой-то циклической функции ее значение обновляется. Теперь я хочу получить обновленное значение Data_updated_u8
в файле second.c.
Есть ли способ получить статическую переменную в second.c без использования внешней переменной? Или с помощью указателей?
Как получить доступ к статической переменной в другом файле без использования extern в .h?
Ответы (1)
Теперь я хочу получить обновленное значение Data_updated_u8 в файле second.c
Это проблема дизайна. Если у вас есть локальная переменная static
, объявленная в области файла в файле .c, то эта переменная должна рассматриваться как частная. Если ваш проект надежен, другие файлы не должны требовать прямого доступа к этой переменной. Так что здесь вы должны сделать шаг назад и обдумать дизайн своей программы в первую очередь.
Или с помощью указателей?
Плохая идея, это еще хуже, чем использование глобальных переменных. Вы не должны выставлять частные переменные через указатели. Вы также не должны использовать глобальные переменные. В целом, вы не должны создавать жесткую связь между несколькими файлами, создавая такие странные зависимости.
Если вам действительно нужно использовать эту переменную совместно с другими файлами, то правильным способом будет написать API-функцию установки/получения, которую вы предоставляете через файл заголовка. Затем установите/получите данные по значению. (Возможно, вам даже не нужно устанавливать его извне?)
Кроме того, не стоит придумывать какой-то местный гаражный стандарт uint8
. Используйте международный стандарт языка C uint8_t
из stdint.h.
data.h
#include <stdint.h>
uint8_t get_data (void);
void set_data (uint8_t val);
data.c
#include "data.h"
static uint8_t data;
uint8_t get_data (void) { return data; }
void set_data (uint8_t val) { data = val; }
Да, напишите API доступа/получения в первом файле.
Вы бы использовали функцию для доступа к ней, как говорили другие. Но вам, вероятно, следует немного больше подумать о том, что вы делаете в первую очередь. Функция должна быть глобальной, так почему бы не сделать глобальную переменную? В любом случае вы страдаете от недостатка глобальных переменных, но с тем, как вы это делаете, вы также страдаете от бессмысленной лишней хлама.