Объявить переменную extern внутри функции C?
Я определяю переменную в файле C: int x
, и я знаю, что я должен использовать extern int x
, чтобы объявить ее в других файлах, если я хочу использовать ее в других файлах.
Мой вопрос: где я должен объявить его в других файлах?
-
Вне всех функций
// in file a.c:
int x;
// in file b.c:
extern int x;
void foo() { printf("%d\n", x); }
-
внутри функции (-ов), которая будет ее использовать?
// in file b.c:
void foo() {
extern int x;
printf("%d\n", x);
}
Мои сомнения:
- Какой из них правильный?, или
- Что предпочтительнее, если оба правильны?
Ответы
Ответ 1
Ответ 2
Предположим, если вы объявляете внутри функции:
// in file b.c:
void foo() {
extern int x;
printf("%d\n", x);
}
void foo_2() {
printf("%d\n", x); <-- "can't use x here"
}
тогда x
отображается локально внутри функции foo()
, и если у меня есть какая-либо другая функция, скажите foo_2()
, я не могу получить доступ к x
внутри foo_2()
.
Если вы объявляете x
снаружи перед всеми функциями, то он будет доступен/доступен глобально в полном файле (все функции).
// in file b.c:
extern int x;
void foo() { printf("%d\n", x); }
void foo_2() { printf("%d\n", x); } <--"visible here too"
Итак, если вам нужна x
только в одной функции, вы можете просто объявить внутри этой функции, но если x
использует в нескольких функциях, тогда объявляйте x
вне всей функции (ваше первое предложение).
Ответ 3
вы можете использовать другую технику в том, как вы можете объявить переменную со спецификатором extern.
// in file a.c:
int x;
// in file b.h // make a header file and put it in
// the same directory of your project and every
// time you want to declare this variable
// you can just INCLUDE this header file as shown in b.c
extern int x;
// in file b.c:
#include "b.h"
void foo() { printf("%d\n", x); }