адрес статической переменной может получить доступ из других файлов или нет - PullRequest
2 голосов
/ 22 октября 2019

У меня есть один вопрос о статической переменной на языке Си. Например, есть два файла, один - «Action.c», а другой - «Result.c»

[В файле Action.c] `

static uint8_t actionResult[10] = {0x00};
void getActionResult (uint8_t** resultPtr)
{
    *resultPtr = actionResult;
}

[In Result.c]

void main (void)
{
    uint8_t* getResultPtr = NULL;
    getActionResult(&getResultPtr);
}

Я хочу знать, что это законный метод получения значения из файла "Action.c" или нет. А также хотите знать, переносить адрес статической переменной в другой файл - это плохая идея или нет?

Большое вам спасибо.

1 Ответ

1 голос
/ 22 октября 2019

Это законно? Да. Статическую переменную на уровне файлов нельзя увидеть снаружи модуля перевода, но если этот модуль перевода публикует адрес каким-либо образом (как у вас), к нему можно получить доступ или изменить его путем разыменования этого адреса.

Является ли этохорошая идея? На самом деле, нет. Весь смысл статики на уровне файлов состоит в том, чтобы защитить их от вещей за пределами модуля перевода. Если вы собираетесь это разрешить, на самом деле нет никакого смысла вообще помечать его как статическое.

Просто определите его как uint8_t actionResult[10] = {0x00}; и пусть main использует имя переменной, а не получает и разыменовывает ее адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...