Jak moze wyglądac program w którym nie wiemy, czy zmienne lokalne są statyczne, czy dynamiczne na stosie który pozwoli to sprawdzić ?
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 :)
Nie wiem jak ty, ale ja nie wiem o co chodzi.
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).
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
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?
tak dobrze wiec jak to ma wyglądać?? [green]
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ć...)
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.