AVR и GCC, AVR это контроллеры, кто не в курсе. Но это не должно влиять на суть.
Программа на Си. Объявляю в .h переменную, просто int var;
В двух .с файлах делаю #include и ссылаюсь на эту переменную. Смотрю отладчиком - переменная одна, по одному адресу в памяти.
При этом такая конструкция в литературе запрещается, т.к. должна вызывать двойное определение, по идее должен ругаться компоновщик. Правильно в хедере писать extern int var, а объявление делать в каком-либо .с файле. Что происходит?
// test.c
#include "module.h"
void main()
{
var=0;
inc();
var++;
}
// module.h
#ifndef _MODULE_H
#define _MODULE_H
int var;
void inc();
#endif
// module.c
#include "module.h"
void inc()
{
var++;
}