Różnica między prototypem a deklaracją

Odpowiedz Nowy wątek
2010-08-04 14:07
0

Witam,mam kilka pojęć które chciałbym do końca wyjaśnić,korzystałem z google ale mimo to nie jestem do końca pewien,oto one:

1) Co to jest prototyp funkcji a jej deklaracja,jaka jest między tymi znaczeniami różnica
2) Co to znaczy inicjalizacja, przypisanie wartości zmiennej przy deklaracji,pierwsze przypisanie zmiennej czy może ogólnie przypisywanie zmiennej jakiejś wartości?

Z góry wielkie dzięki

Pozostało 580 znaków

2010-08-04 14:17
sid90
0

Proponowałbym kupić sobie jakąś książkę, bo to są absolutne podstawy. poza tym ja znalazłem odpowiedzi w internecie chcoażby tutaj http://binboy.sphere.pl/index.php?show=35

Pozostało 580 znaków

2010-08-04 14:18
0

mam książke,tylko jakoś ciężko mi tam znaleźć tą informacje

Pozostało 580 znaków

2010-08-04 14:20
0

ale tam nie ma wyjaśnione co to deklaracja funkcji,i nie wiem dalej jaka jest różnica

Pozostało 580 znaków

2010-08-04 14:35
jaa
0
#include <iostream.h>
//prototyp funkcji max
int max(int,int,int );
int main()
{
    int x, y, z;
    cout<<"Wprowadz trzy liczby calkowite:"<<endl;
    cin>>x>>y>>z;
    cout<<"Najwieksza z tych liczb to:"<<max(x,y,z)<<endl;
    return 0;
}

//definicja funkcji max
int max(int a,int b,int c)
{
    int max=a;
    if(b>max)
        max=b;
    if(c>max)
        max=c;
    return max;
}

Pozostało 580 znaków

2010-08-04 16:21
hmm
0

mateuszek1992 zadajesz za dużo i ( przepraszam ale ) głupie pytania. Rozumiem, że możesz czegoś nie wiedzieć to jest normalne lecz podczas programowania trzeba wykazać się kreatywnością, dociekliwością i przede wszystkim samodzielnością, a ty nie spełniasz tych wymogów. Jak czegoś nie wiesz walisz od razu na forum i czekasz na odpowiedzi. Zobacz sobie swoją działalność na 4p. Od momentu twojej rejestracji zadałeś już dużo głupich pytań, począwszy o "dobrą książkę do C", a kończąc na "Różnica między prototypem a deklaracją". To są pytania, na które uzyskasz odpowiedź przeglądając książkę bądź internet w 3 min ( no może przesadziłem. Góra dwie minuty ). Zastanów się nad tym bo zadając takie pytania daleko nie zajdziesz. Nie wspomnę już o tym, że w jednym z twoich tematów stwierdziłeś, że znasz już język programowania, więc tym bardziej takie pytania są śmieszne.

Pozostało 580 znaków

2010-08-04 16:36
0

zgadzam się z tobą w 100 :P tylko może przez to że są wakacje i słońce troche mi się nie chce i najlepiej by mieć Od razu odpowiedz:P

Pozostało 580 znaków

2010-08-04 16:51
1

Nie macie się co czepiać przeicież się pyta skoro nie odpowiadacie na pytanie ani nie wskazujecie na odpowiedź na innej stronie to po co pisać? Koleś się pyta widocznie dlatego ,że nie zrozumiał tego dobrze w książce albo ma jakieś wątpliwości.

Prototypy funkcji
Mówią one o tym jak funkcja będzie wyglądała czyli jakie przyjmuje parametry , co będzie zwracała i jak się nazywa.

np.

 int max(int a,int b, int c); //Prototyp funkcji max zwróci ona nam największą liczbę spośród 3 (wskazuje na to nazwa funkcji)

Definicja funkcji
Tutaj "kopiujemy Prototyp" i uzupełniamy go o to co dokładnie ta funkcja ma robić.

np.

  int max(int a,int b, int c)
{
   int maxx;
   if(a>b)
  ....//Reszta kodu
  return maxx;
}

Pytanie po co prototyp a chociaż dla takiej sytuacji

int f2()
{
  f1();//Kompilator nic nie wie o funkcji f1();
}

void f1()
{
cout << "Napis";
}

Dlatego robimy Prototyp

void f1();
int f2()
{
  f1();//Wszystko gra :)
}

void f1()
{
cout << "Napis";
}

Inicjalizacja

Inicjalizacja zmiennej polega na tym ,że przypisujemy jej daną wartość lub też zostawiamy ją sobie samą zostanie wykonany konstruktor ( http://pl.wikipedia.org/wiki/Inicjalizacj) więc jest to wykonywane tylko podczas tworzenia zmiennej dalej są to po prostu przypisania.

np.

int a =22;
int b;

Deklaracje zmiennych

Deklaracje występują:(C++)
-poza funkcją, klasą, metodą – dla zmiennych globalnych
-na początku instrukcji blokowej { } dla zmiennych lokalnych.
-jako wyrażenie w dalszych częściach instrukcji blokowej { } dla zmiennych lokalnych (nie w języku C)

(http://pl.wikipedia.org/wiki/Deklaracja_(informatyka))

Jak gdzieś jest błąd przepraszam poprawię :)


Chacked...

Pozostało 580 znaków

2010-08-04 17:48
0

To pytanie moim zdaniem NIE jest aż tak głupie i oczywiste. Póki co nikt z Was jeszcze nie udzielił poprawnej odpowiedzi (!), więc nie ma co się śmiać.

Prawdę mówiąc, ja sam nie jestem pewien, czy dobrze to rozumiem. Pojęcia "prototypu" po prostu nie używam, chyba że w językach programowania, które faktycznie mają dziedziczenie prototypowe (tak jest w języku JavaScript).

Zamiast tego używam pojęcia "deklaracja".

@Gelldur:
Ty chcesz dobrze, ale piszesz o "prototypie" i podajesz kod, w którego komentarzu jest napisane jak wół słowo "deklaracja". WTF? A poniżej piszesz o deklaracji, a w kodzie jest definicja.

Następnie wspominasz o inicjalizacji, co zupełnie jest oderwane od tematu, po czym wklejasz coś z wiki. To nie jest dobra odpowiedź. Pozostałe odpowiedzi są całkowicie bezużyteczne, a ten kod, co wkleił @jaa, to z takim formatowaniem w ogóle nie powinien się znaleźć na forum programistycznym.


@mateuszek1992:

Powiem Ci, jak ja to rozumiem.

Zwykle używamy pojęcia "deklaracja" i "definicja". Deklaracja informuje kompilator tylko o sygnaturze funkcji. Czyli o tym, jakie argumenty dostaje i co zwraca. Deklaracja wygląda tak:

int sumuj(int a, int b);

Jak widzisz, nie ma tu ciała funkcji sumuj. Jest tylko informacja, że funkcja dostaje 2 inty, a sama zwraca int. Dzięki temu, gdy kompilator napotka coś takiego:

int cztery = sumuj(2, 2);

To się nie zdziwi. Powie: aha, widziałem już wcześniej deklarację funkcji sumuj. Ma ona przyjąć dwa inty -- a tutaj w tym wywołaniu dostaje 2 inty. Ma zwrócić int i tutaj faktycznie jej wynik podstawiany jest do zmiennej cztery, typu int. Wszystko się zgadza, idę dalej!

Kompilator nie wie, co ta funkcja robi, ale dzięki temu, że widział gdzieś wcześniej deklarację funkcji może sprawdzić, czy jest poprawnie wywoływana.

Deklaracji może być kilka. Muszą tylko być takie same.

Ale funkcję trzeba jeszcze zdefiniować. Powiedzieć kompilatorowi, co ona w środku robi. To właśnie mówimy, pisząc definicję:

int sumuj(int a, int b)
{
  return a + b;
}

Tutaj już widzimy, że funkcja sumuj... sumuje ;). Dana funkcja może -- i musi -- mieć w programie dokładnie jedną definicję.

I jest jeszcze jedna zasada: definicja funkcji jest jednocześnie deklaracją. Czyli jeśli gdzieś u góry kodu masz definicję funkcji, a dopiero niżej ją wywołujesz, to nie musisz nigdzie dopisywać deklaracji. Definicja już sama liczy się jako deklaracja.

Możesz więc napisać deklarację oddzielnie, a definicję mieć gdzieś na dole, o tak:

int sumuj(int a, int b); // deklaracja

int main()
{
  int wynik = sumuj(2, 2); // kompilator nie protestuje, bo zna już symbol sumuj dzięki deklaracji wyżej
  return 0;
}

int sumuj(int a, int b) // definicja
{
  return a + b;
}

Albo możesz po prostu definicję przenieść na górę -- i ona zadziała jak deklaracja, bo definicja jest jednocześnie deklaracją:

int sumuj(int a, int b) // definicja; definicja jest jednocześnie deklaracją
{
  return a + b;
}

int main()
{
  int wynik = sumuj(2, 2); // kompilator nie protestuje, bo powyższa definicja jest też deklaracją i wiadomo czym jest sumuj
  return 0;
}

Tyle gwoli wyjaśnienia, ale nie o to pytałeś.

Czym jest prototyp?

Cóż... W tym kontekście... Nie mam pewności. Wydaje mi się, że prototyp to po prostu deklaracja, ale taka, która NIE jest definicją. Czyli coś takiego:

int sumuj(int a, int b); // prototyp, ale też... deklaracja

To jest zarówno prototyp, jak i deklaracja. Jaka więc różnica? Chyba jedynie taka, że mówi się, iż definicja jest deklaracją. Ale definicja nie jest prototypem:

int sumuj(int a, int b) // definicja, czyli również deklaracja -- ale prototyp to już nie jest
{
  return a + b;
}

Nie mam pojęcia, czy się wstrzeliłem o to, o co tam chodzi. Nie używam nomenklatury "prototyp" gdy mówię o tych rzeczach. Mówię: deklaracja, definicja.

Generalnie jednak jest tak, że nikt na definicję nie mówi "deklaracja", mimo iż definicja jest też deklaracją. Za to pojęcia "prototyp" i "deklaracja" używane są wymiennie.

Dlatego ja raczej nie używam określenia "prototyp" w tym kontekście.

O prototypie mówię, gdy chodzi mi o wzorzec projektowy, o dziedziczenie prototypowe lub np. prototyp interfejsu graficznego aplikacji.

Pozostało 580 znaków

2010-08-04 17:49
Bury pajac
0
Gelldur napisał(a)

Nie macie się co czepiać przeicież się pyta skoro nie odpowiadacie na pytanie ani nie wskazujecie na odpowiedź na innej stronie to po co pisać? Koleś się pyta widocznie dlatego ,że nie zrozumiał tego dobrze w książce albo ma jakieś wątpliwości.

Jesteś nawet zabawny. Sam wszystko genialnie zrozumiałeś i rozwiewasz wszelkie wątpliwości:

Gelldur napisał(a)

Deklaracja funkcji
Tutaj "kopiujemy Prototyp" i uzupełniamy go o to co dokładnie ta funkcja ma robić.

np.

int max(int a,int b, int c)
{
int maxx;
if(a>b)
....//Reszta kodu
return maxx;
}

mimo iż w podanym przez ciebie linku do wikipedii jest napisane:

W języku C, C++ deklaracje podprogramów (nazywane prototypem) [...]

Aż chce się wkleić obrazek FACEPALM. Czytaj deklaracja funkcji i prototyp funkcji to synonimy.

A, i notka od moderatoratorów:

Ktos napisał(a)

PS Po przecinku wstawia się spację, nie odwrotnie.

Źródło: http://4programmers.net/Forum/viewtopic.php?id=163843

Pozostało 580 znaków

2010-08-04 18:27
0

@Pajac: na dole napisałem że jak ktoś zauważy błędy to prosze poprawić to raz a dwa najzwyczajniej w świecie pomyliły mi się słowa już poprawiłem chyba jest dobrze...

@bswierczynski
"Następnie wspominasz o inicjalizacji, co zupełnie jest oderwane od tematu, po czym wklejasz coś z wiki."

Przecież w drugim pytaniu autora tematu jest:
"Co to znaczy inicjalizacja,.."

Więc pisze a co do linku z wiki daje to jako poparcie i ewentualnie aby on sam mógł sobie przeczytać wiem ,że pomyliłem słowa po przeczytaniu twojego posta zrozumiałem i rzeczywiście tamte słowa to synonimy ale już chyba dobrze poprawiłem.


Chacked...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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