Zerowanie zmiennej statycznej w innej funkcji.

0

Witam,
Mam dwie funkcje

void funA()
{
	static int i = 0;
	i++;
	if(i>15)
	{
                //pozostałe operacje
		i = 0;
	}
}

void funB()
{
	i = 0;
        //funkcja nie widzie zmiennej i;
}

Chciałbym móc zerować zmienną i zarówno w funkcji funA() co już działa, ale w nie wiem jak zerować zmienną i w funkcji funB(); ?

2

Nie da się w prosty sposób, ale:

  • możesz zwracać z pierwszej funkcji referencję do tej zmiennej,
  • możesz umieścić obie funkcje oraz tą zmienną w jednej klasie/przestrzeni nazw.
0
int &funI()
{
    static int i=0;
    return i;
}

void funA()
{
    int &i=funI();
    if(++i>15)
    {
                //pozostałe operacje
        i = 0;
    }
}
 
void funB()
{
      int &i=funI();
}

Z tym że to zwykła zaślepka na zmienne globalne (tylko aby nie było), większość problemów i tak zostaje. Twórz obiekty.

0

Żadne obiekty nie wchodzą w grę, bo to ma być kod w czystym C. Dzięki za pomoc.

1

W takim razie zmienna statyczna w pliku lub zwracanie wskaźnika do niej z pierwszej funkcji, co sprowadza się do tego samego.

0
Zastanów się nad czymś takim:
int funI(int mod)
  {
   static int i=0;
   return i=(i+1)%mod;
  }
 
void funA()
  {
   if(!funI(16))
     {
                //pozostałe operacje
     }
  }
 
void funB()
  {
   funI(1); // reset do 0
  }
0

@_13th_Dragon
Myślałem, że mówisz o programowaniu obiektowym pisząc "Twórz obiekty".

0

Nie rozumiem po co tyle kombinować, najprościej zastosować zmienną globalną widoczną jedynie w bieżącym module:

static int magicznaZmienna = 0; // static jest potrzebne by zmienna nie była osiągalna w innych modułach
void funA()
{
    magicznaZmienna++;
    if(magicznaZmienna>15)
    {
                //pozostałe operacje
        magicznaZmienna = 0;
    }
}
 
void funB()
{
    magicznaZmienna = 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1