[C] Kilku Poziomowe Działania

[C] Kilku Poziomowe Działania
S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Witam,
Mam następujący problem, otóż:
Mamy pewną funkcje w której jest zadeklarowana zmienna, jak przekazać ją do funkcji kilka poziomów niżej? Przykładowo:

Kopiuj
void main(){
int zmienna=0;
funkcja1();
}

void funkcja1(){
funkja2(zmienna);
}

void funkcja2(int zmienna){
printf("%d",zmienna);
}

Nie chce przekazywać zmiennej do funkcji 1 - jednak mieć możliwość działania na niej w funkcj2...jak to wykonać?

Z góry dziękuje za pomoc

dampe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: SK
0

Najłatwiej przez zmienną globalną, chociaż wiadomo jak to później jest z globalami :P

S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Chodzi własnie o to aby pominąć zmienne globalne...
Tak jak wspominałem zmienna zadeklarowana w funkcji:)

lukasz1235
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1105
0

Ale po co?

S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Jedno z założeń jest pominięcie używania zmiennych globalnych - z tego powodu trzeba jakoś to przekazać:/ Tylko jak?

dampe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: SK
0

Ta zmienna jest tam zdefiniowana, nie zadeklarowana.
Jeżeli nie chcesz przekazywać tej zmiennej w argumencie funkcji i nie chcesz użyć zmiennej globalnej, to nie ma możliwości by to zrobić // przynajmniej ja takiej nie znam..

S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

A jakoś inaczej rozwiązać ten problem? Tylko bez zmiennych globalnych:/

MJ
  • Rejestracja: dni
  • Ostatnio: dni
0

wywołaj funkcję 2 z argumentem.

lukasz1235
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1105
1
Kopiuj
void funkcja1()
{
   int zmienna;
   asm("mov 28(%%rbp), %0" : "=r"(zmienna));
   funkcja2(zmienna);
}

Ale to tylko po to, żeby pokazać że się da. Bez praktycznego zastosowania. Nie kombinuj tylko przekaż to po kolei przez argumenty albo ostatecznie zrób zmienną globalną.

dampe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: SK
0

Zapisanie wartości tej zmiennej do pliku, następnie odczytanie jej z tego pliku?

S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

extern - coś w tym kierunku jakby pójść? Tylko w tym przypadku nie pójdzie chyba bo uzyskuje zawsze:

[Linker error] undefined reference to 'zmienna'

MJ
  • Rejestracja: dni
  • Ostatnio: dni
0

extern oznacza tyle, że deklarujesz taką oto zmienną i dajesz do zrozumienia, że ona gdzieś w którymś z plików dołączonych do projektu się znajduje. To Ci nie pomoże.

S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Więc jakieś inne pomysły na rozwiązanie tego, czy tylko przekaz po zmiennych - kolejnych funkcjach?

MJ
  • Rejestracja: dni
  • Ostatnio: dni
0

lukas podał Ci rozwiązanie, ale jak sam powiedział, nie ma sensu kombinowania.

szymczak1503
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

Może coś ala funkcja1(void *funkcja2(int zmienna));
Jako argument wysyłasz adres funkcji2.

MJ
  • Rejestracja: dni
  • Ostatnio: dni
0

to nie jest wskaźnik na funkcję, tylko funkcja zwracająca wskaźnik typu void. I nie.

S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

popróbuje z tym przekazywaniem funkcji, dzięki:)

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 353
0

Moze przekazanie przez rejestr procesora? Odczytanie za pomoca asma register int x;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.