Доступны ли глобальные переменные в файле, если файл включен? - PullRequest
0 голосов
/ 04 февраля 2019

У меня странное поведение, когда я пытаюсь использовать некоторые глобальные переменные, которые включены в 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 или я должен пойти на поиск ошибок.

1 Ответ

0 голосов
/ 04 февраля 2019

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

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