program rozpoznający zmienne

0

Jak moze wyglądac program w którym nie wiemy, czy zmienne lokalne są statyczne, czy dynamiczne na stosie który pozwoli to sprawdzić ?

0
szczypiorek napisał(a)

Jak moze wyglądac program w którym nie wiemy, czy zmienne lokalne są statyczne, czy dynamiczne na stosie który pozwoli to sprawdzić ?
znaczy mamy kompilatoe jezyka o składni C o ktorym nie wiemy jakie są te zmienne :)

0

Nie wiem jak ty, ale ja nie wiem o co chodzi.

0

wygląda na to, że wziął z trzech różnych zdanie po kawałku i zrobił z tego jedno zdanie, ale o zgrozo, domyślam się o co mu chodzi!
Dostaje wskaźnik i on chce wiedzieć na jaką cześć pamięci wskazuje ten wskaźnik: na stos, stertę lub wspólny obszar danych.
A moja odpowiedź to: nie ma potrzeby istnienia takiego mechanizmu, bo dobrze napisany program go nie wymaga (więc po co tworzyć takie coś dla piszących brzydkie programy).

0
MarekR22 napisał(a)

wygląda na to, że wziął z trzech różnych zdanie po kawałku i zrobił z tego jedno zdanie, ale o zgrozo, domyślam się o co mu chodzi!
Dostaje wskaźnik i on chce wiedzieć na jaką cześć pamięci wskazuje ten wskaźnik: na stos, stertę lub wspólny obszar danych.
A moja odpowiedź to: nie ma potrzeby istnienia takiego mechanizmu, bo dobrze napisany program go nie wymaga (więc po co tworzyć takie coś dla piszących brzydkie programy).

to jest jedno zadanko i wlasnie niemam pojecia jak to zrobic dokładnatresc tego zadanka brzmi :
"Zadanie 3
Załóżmy, że mamy kompilator pewnego języka o składni takiej jak C, o którym nie wiemy, czy zmienne lokalne są statyczne, czy dynamiczne na stosie. Napisz program, który pozwoli to sprawdzić. "
wiem tylko a raczej dostalem taka wskazowke ze :Trzeba sprawdzić, czy wartość zmiennej zachowuje się pomiędzy wywołaniami funkcji.
niewiem jak to ma wygladac :) dziwne jakies

0

Teraz zdania mają ład i skład, ale treść tego zadania NIE.
Czegoś w treści zadania brakuje. Jeśli dobrze się domyślam o co chodzi to:

Mój domysł napisał(a)

Jest jakiś język programowania, o którym nic nie wiemy. Zakładamy, że ma składnie podobną do C (lub przynajmniej przetłumaczeni programu z C jest na ten język jest proste). I traz napisać kod w C, który sprawdzi czy dla tego języka zmienne wewnątrz funkcji tworzone są dynamicznie na stosie, czy może statycznie w pewnym zadanym obszarze pamięci.

Czy dobrze zrozumiałem istotę problemu?

0

tak dobrze wiec jak to ma wyglądać?? [green]

0
char* fun(char *x) {
 char y[32];
 strncpy(y, x, sizeof(y)-1);
 y[31] = 0;
 return y;
}

int czyGlobalne() { //int zamiast bool
 char *w = fun("ala kot");
 fun("zuo zuo"); //bez tego dane moglyby zostac nieruszone na stosie
 return !strncmp(w, "ala kot", 7);
}

(pisane od reki, bez sprawdzenia)
Skompilowane w c zwróci 0 (fałsz) (warto wyłączyć optymalizację bo może namieszać...)

0

to powyżej: nie widzę powodu by miało zadziałać. Moja wersja:

int testStatic(int value)
{
     /*static*/int localValue = 0; // inicjalizacja może być zbędna, zależnie od formalizmu zadania - tego języka podobnego do C
     if(localValue == value){
          localValue= value;
          return 1;
     }     
     localValue = value;
     return 0;
}

int main() {
     testStatic(3);
     if( testStatic(3) ) {
           printf("zmienne lokalne tworzone są statycznie");
     } else {
           printf("zmienne lokalne tworzone są dynamicznie");
     }
}

odkomentowanie słowa kluczowego static pokaże różnicę w działaniu dla zmiennych statycznych.

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