проблема со статической переменной
От: vip_delete  
Дата: 09.06.06 20:49
Оценка:
1.h
static int x;
void init();


1.c
#include "1.h"

void init()
{
    x = 1912;
}


main.c
#include "1.h"
#include <stdio.h>
void main()
{
    init();//при  заходе сюда меняется аддрес x! %| и 1912 присваевается хз куда.
    printf("%d",x);
}


Выводит не 1912, в чем трабла?
Re: проблема со статической переменной
От: Centaur Россия  
Дата: 09.06.06 21:05
Оценка:
Здравствуйте, vip_delete, Вы писали:

1.h
static int x;
void init();


1.c
#include "1.h"
void init()
{
    x = 1912;
}


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.h
extern 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 её определяет.
Re: проблема со статической переменной
От: Vain Россия google.ru
Дата: 09.06.06 21:06
Оценка:
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Re: проблема со статической переменной
От: WizardSD  
Дата: 09.06.06 21:22
Оценка:
Здравствуйте, vip_delete, Вы писали:

_>
_>1.h
_>static int x;
_>void init();
_>


_>
_>1.c
_>#include "1.h"

_>void init()
_>{
_>    x = 1912;
_>}
_>


_>
_>main.c
_>#include "1.h"
_>#include <stdio.h>
_>void main()
_>{
_>    init();//при  заходе сюда меняется аддрес x! %| и 1912 присваевается хз куда.
_>    printf("%d",x);
_>}
_>


_>Выводит не 1912, в чем трабла?


в том что не надо объявлять переменные в .h файлах.
1.h замени на extern int x;
а в 1.c поставь static int x;
некоторые компиляторы нормально это пережовывают.

Проблема дыла в том, что у тебя 2 статические (т.е. видные только в текущей еденице компиляции) переменные с именем x.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: проблема со статической переменной
От: vip_delete  
Дата: 10.06.06 08:18
Оценка:
всем спасибо за помощь, понял в чем трабла.
Re[2]: проблема со статической переменной
От: VoidEx  
Дата: 10.06.06 20:02
Оценка:
Здравствуйте, WizardSD, Вы писали:

Поправлю немного)
WSD>в том что не надо определять переменные в .h файлах.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.