Предполагая, что ваша переменная глобальна и не статична.
Вам необходимо объявить его в файле заголовка. Для этого мы используем ключевое слово extern
. Как указано в комментариях, эти ключевые слова не нужны, но большинство пользователей C предпочитают использовать его в заголовках, это соглашение.
stackoverflow.h:
#ifndef STACHOVERFLOW_H
#define STACHOVERFLOW_H
extern int my_var;
#ifndef
И вы инициализировать его в исходном файле. (Использование ключевого слова extern
запрещено, если вы хотите указать значение инициализации).
stackoverflow.c
#include "stackoverflow.h"
int my_var = 50;
Не помещайте значение инициализации в заголовке, или вы получите ошибку компоновщика, если заголовок используется, по крайней мере в два раза.
Теперь вы можете использовать свою переменную в любом другом модуле, включив заголовок.
main.c
#include <stdio.h>
#include "stackoverflow.h"
int main()
{
printf("my_var = %d\n", my_var);
return 0;
}
В том числе заголовка «stackoverflow.h» в «stackoverflow.c» способ получить уверено определение в исходных декларациях спичечного файла в заголовочном файле. Это позволяет иметь ошибки, как только компиляция вместо иногда критических ошибок компоновщика.
Редактировать: Это вовсе не способ сделать переменную «приватной». Вы должны использовать статическую переменную, чтобы сделать ее «частной». См. R Sahu's answer
Как только мы включим stackoverflow.h в stackoverflow.c. Компилятор скопирует все содержимое в stackoverflow.c правильно? то почему это должно быть extern?Извините, если мой вопрос глупый –
да, вы правы Bhavith C Acharya. Это указывает на мой ответ? – shafeeq
Извините, дорогой @ user3302647 Я не получил ответа. Мой вопрос в том, что нужно положить 'extern int my_var' в stackoverflow.h –