main.c
#include"1.h"#include <stdio.h>
void main()
{
init();//при заходе сюда меняется аддрес x! %| и 1912 присваевается хз куда.
printf("%d",x);
}
Две единиицы трансляции 1.c и main.c объявляют две разные статические переменные int x. После этого init() присваивает 1912 своей переменной, а main распечатывает свою.
//1.hextern int x;void init();
//1.c#include"1.h"int x;void init()
{
x = 1912;
}
// main.c#include"1.h"#include <stdio.h>
int main(int, char**)
{
init();
printf("%d\n", x);
return 0;
}
Здесь 1.c и main.c объявляют внешнюю переменную x, и 1.c её определяет.
Здравствуйте, vip_delete, Вы писали:
_>Выводит не 1912, в чем трабла?
Когда объявляешь так переменные и функции, то они считаются собственностью модуля (приватными) в котором определены.
У тебя printf("%d",x); вызвана в модуле main.c, а init() инициализирует совсем другую переменную x — из модуля 1.h. Либо напиши к функции init функцию get, либо замени static на extern.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
в том что не надо объявлять переменные в .h файлах.
1.h замени на extern int x;
а в 1.c поставь static int x;
некоторые компиляторы нормально это пережовывают.
Проблема дыла в том, что у тебя 2 статические (т.е. видные только в текущей еденице компиляции) переменные с именем x.