Получите доступ к глобальной статической переменной из другого файла в C

На языке C я хочу получить доступ к глобальной статической переменной вне объема файла. Сообщите мне самый лучший способ сделать это. Один из методов должен присвоить глобальной переменной экстерна значение статической переменной,

В файле a.c

static int val = 10;
globalvar = val;

В файле b.c

extern globalvar;

Но в этом случае любые изменения в val (файл a.c) не будут обновлены в globalvar в (файл b.c).

Сообщите мне, как я могу достигнуть того же.

Спасибо, Sikandar.

6
задан MarmiK 4 June 2014 в 04:18
поделиться

4 ответа

Ну, если вы можете модифицировать файл a.c, то просто сделайте val нестатической. Если вы можете модифицировать a.c. , но не можете сделать val нестатическим (почему?), то вы можете просто объявить глобальный указатель на него в a.c.

int *pval = &val;

и в b.c. do

extern int *pval;

, что позволит вам получить доступ к текущему значению val через *pval. Или же Вы можете ввести нестатическую функцию, которая вернет текущее значение val.

Но опять же, если Вам нужно получить доступ к ней из других модулей перевода, просто сделайте ее нестатической.

.
20
ответ дан 8 December 2019 в 02:30
поделиться

Решение 1:

В файле a.c

static int val=10;
int *globalvar =&val;

В файле b.c

extern int *globalvar;

Решение 2:

Вместо того, чтобы иметь другую переменную для передачи адреса статической переменной, добавляющую несколько потерь памяти, сделайте саму статическую переменную extern.

Решение 2 рекомендуется, но в случае, если вы ограничены изменением статической переменной на extern, используйте решение 1.

.
2
ответ дан 8 December 2019 в 02:30
поделиться

Вы не можете получить доступ к статической переменной файлового уровня вне файла.

Если вам действительно нужно это сделать, у вас есть пара вариантов.

  1. Добавьте функцию доступа к файлу, в котором есть статическая переменная. Хорошо, что это ограничивает доступ извне файла для доступа только на чтение:

    int read_static() { return val; }

  2. Бросьте статический квалификатор и сделайте переменную глобальной.

5
ответ дан 8 December 2019 в 02:30
поделиться

Можно сделать указатель на глобальную статическую переменную.

/* file  a.c */
static int a = 100; /* global static variable not visible outside this file.*/
int *b = &a; /* global int pointer, pointing to global static*/


/* file b.c */
extern int *b; /* only declaration, b is defined in other file.*/

int main()
{
        printf("%d\n",*b); /* dereferencing b will give the value of variable a in file a.c */
        return 0;
}

При запуске:

$ gcc *.c && ./a.out
100
9
ответ дан 8 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: