В C
, static
означает «Локально для модуля»
Обратите внимание, что операторы #include
просто вставляют заголовочный файл во включающий файл.
, следовательно, высоздание двух разных символов (бывает с одинаковым логическим именем) в разных модулях.
f.c
cnt
это разные cnt
, тогда main.c
Примечание: static
в C
имеет другое значение, чем его C++
аналог.
и поскольку C++
является C
Совместимым, static
вне класса имеют то же значение, что и в C
Редактировать:
В вашем случае вы не хотите static
, вам нужна переменная, но я думаю, у вас были проблемы с компоновщиком, рассказывающим вам о «неоднозначных символах».
Я бы предложил объявить extern
в заголовочном файле и объявите фактическую переменную в модуле.
t.h
extern int cnt; // declaration of the variable cnt
main.cpp
#include
#include "t.h"
int cnt = 0; // actual definition of cnt
void main()
{
cnt=0;
printf("before f : cnt=%d\n",cnt);
f();
printf("after f : cnt=%d\n",cnt);
}
t.cpp
#include "t.h"
void f()
{
cnt++;
}