Посмотрите на следующий фрагмент кода ...C - статическая переменная маскирования глобальная переменная
File1.h
void somefunc(int);
file1.c
#include "File1.h"
extern int var;
void somefunc(int x)
{
......
var ++;
etc, etc,
....
return;
}
File2.h
static int var;
void someotherfunc(int);
Файл2.c
#include "File2.h"
#include "File1.h"
int var;
void someotherfunc(int z)
{
z = etc etc;
var --;
......
somefunc(z);
.....
return;
}
Эти четыре файла скомпилированы без проблем. Проблема возникает, когда я пытаюсь инициализировать переменную 'var'. Если «var» инициализируется в File2.c, где это глобальная переменная, код компилируется без каких-либо проблем. Но когда я пытаюсь инициализировать статическую переменную в File2.h, компилятор выдает сообщение об ошибке: «переменная« var »в File1.c не определена». Может кто-нибудь рассказать, что здесь происходит.
Я просто пытался понять концепцию статических переменных и столкнулся с этой путаницей. Любая помощь будет оценена по достоинству.
Зачем вам нужно делать «static int var»? в файле заголовка? Это создаст одну копию статики для каждого .c файла, в который вы включаете этот заголовочный файл. – Jay
Файл заголовка включается несколькими файлами, что нарушает правило единого определения. «Вы можете объявлять все столько раз, сколько хотите, но вы можете определить его только один раз». –
Это не так, не так ли? 'File2.h' (тот, у кого есть определение) включен только _once._ Или вы говорите о том, что вы определяете var как в этом заголовке, так и в' File2.c'? – paxdiablo