У меня странное поведение, когда я пытаюсь использовать некоторые глобальные переменные, которые включены в main, в моем C-проекте.
Моя настройка такова, что у меня есть файл с именем global.h
, который содержит переменные, к которым нужно обращаться из нескольких файлов.
Файлы, содержащие определенные функции, которые используют глобальные переменные и изменяют их, ссылаются на них через ключевое слово extern
.
Мой main.c включает все эти файлы (также global.h
).Когда я пытаюсь получить доступ к одной из глобальных переменных из main.c
, я получаю какое-то странное поведение, которое, похоже, меняет все глобальные переменные.
Я пытался разбить его на следующий код.Код ниже, кажется, работает, как я ожидаю, что означает, что main.c
включает a
из global.h
и может изменить его.
main.c
#include "globals.h"
#include "functions.c"
int main ()
{
printf ("a = %d\n", a);
foo ();
printf ("a = %d\n", a);
a = 3;
printf ("a = %d\n", a);
foo ();
printf ("a = %d\n", a);
a = 4;
printf ("a = %d\n", a);
return 0;
}
functions.h
#ifndef GLOBALTEST_FUNCTIONS_H
#define GLOBALTEST_FUNCTIONS_H
extern a;
#endif //GLOBALTEST_FUNCTIONS_H
functions.c
#include "functions.h"
void foo() {
a = 2;
}
global.h
#ifndef GLOBALTEST_GLOBALS_H
#define GLOBALTEST_GLOBALS_H
int a = 0;
#endif //GLOBALTEST_GLOBALS_H
output
a = 0
a = 2
a = 3
a = 2
a = 4
Однако, похоже, что это не так в моем другом приложении.
Итак, что я хочу знать: изменяют ли разные вызовы одну и ту же переменную a
?Могу ли я получить доступ к этим глобальным переменным в global.h
, включив его, или я должен сделать это другим способом?Я хочу понять, если это определено в C или я должен пойти на поиск ошибок.