[C] Kilku Poziomowe Działania

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:

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

0

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

0

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

0

Ale po co?

0

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

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..

0

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

0

wywołaj funkcję 2 z argumentem.

1
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ą.

0

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

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'

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.

0

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

0

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

0

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

0

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

0

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

0

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

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