Как объявить глобальную переменную в файле заголовка и как он должен быть в файле c - PullRequest
0 голосов
/ 29 мая 2020

У меня серьезная проблема, чтобы понять, как объявить глобальную переменную в файле заголовка и как он должен быть в файле c.

В моем .h: extern struct my_global_variable glob;

и на моем. c я добавляю для ссылки: struct my_global_variable glob;

Это так ?? Спасибо за ответ и хорошего дня / ночи, в зависимости: P

1 Ответ

1 голос
/ 29 мая 2020

Объявить и определить глобальную переменную только в 1 .c файле и использовать от extern до объявить глобальную переменную только в других .c файлах.

Пример с 3 исходными файлами: g.h, g1.c и g2.c:

    /*
     * g.h
     */

    typedef struct my_global_type {
     int my_field;
    } my_global_type;

    void g2();

 /*
 * g1.c
 */

#include <stdio.h>

#include "g.h"

my_global_type my_global_variable;

int main() {

    my_global_variable.my_field = 1;
    printf("in main: my_global_variable.my_field=%d\n", my_global_variable.my_field);   
    g2();   
    printf("in main: my_global_variable.my_field=%d\n", my_global_variable.my_field);   
    return 0;

}

/*
 * g2.c
 */


#include <stdio.h>

#include "g.h"

extern my_global_type my_global_variable;

void g2() {

    printf("in g2.c: my_global_variable.my_field=%d\n", my_global_variable.my_field);
    my_global_variable.my_field = 2;
    printf("in g2.c: my_global_variable.my_field=%d\n", my_global_variable.my_field);

}

Вы компилируете с помощью:

 gcc -o g g1.c g2.c

И выполнение говорит:

./g
in main: my_global_variable.my_field=1
in g2.c: my_global_variable.my_field=1
in g2.c: my_global_variable.my_field=2
in main: my_global_variable.my_field=2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...