Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Co z tym NULLem? (i książką Symfonia)

Ostatnio zmodyfikowano 2009-09-02 17:05
Autor Wiadomość
aRusher
Temat założony przez niniejszego użytkownika
Co z tym NULLem? (i książką Symfonia)
» 2009-08-31 22:51:30
Obecnie jestem w trakcie nauki C++ (nie z kursu na tej stronie) i mam pewien dylemat, dotyczący używania (bądź też nie używania) NULLa. To znaczy: po pierwsze chodzi mi o znak null, kończący tablice znakowe - wiem, że sprawdzając gdzie kończy się string, posługiwano się makrodefinicją NULL, dzięki której i tak podczas pracy preprocesora wszystkie wystąpienia tego słówka były zamieniane na 0.

Z drugiej strony mamy tzw. adres zerowy, który wpisujemy do wskaźników, kiedy akurat na nic konkretnego nie mają pokazywać. Tutaj też używa(ło?) się NULLa, ale według kursu, który czytam, nie jest to już ten sam NULL, co w stringach - bo tym razem jest to specjalne miejsce w pamięci.

I pytania:

1. Czy te dwa NULLe to to samo (w końcu makrodefinicja jest jedna, i tak wszystko zamieni na 0)? Mam wrażenie, że NULLe są te same, ale będące ich konsekwencją zera mają inne działanie (znak 'null', adres zerowy).

2. Czytany przeze mnie kurs głosi, że NULL wychodzi (wyszedł) z użycia i teraz powinno się wskaźniki inicjalizować po prostu 0. Jednakże co drugi program, który widzę, używa NULLi - więc jak?
P-9990
DejaVu
» 2009-09-01 00:12:35
Nie wiem jakiego kursu używasz i kto ten kurs pisał :) NULL jest święte w języku takim jak C/C++. Każdy programista używający poprawnie znaczenia NULL'a czyta to makro jednoznacznie - zerujemy wskaźnik. To, że ktoś sobie użyje tego makra jako:
int liczba = NULL;
 wale nie oznacza, że jest to poprawne politycznie. Ta 'stała' bo tak to w sumie można potocznie nazwać ma ułatwiać czytanie kodu. Dla mnie osobiście widząc w kodzie zapis:
zmienna = 0;
 jest równoznaczny z tym, że autor przechowuje w tej zmiennej liczbę. Jeśli widzę:
zmienna = NULL;
 to z automatu wiem, że chodzi o wskaźnik.
Oczywiście są takie stworki, które mają wylane na ogólno przyjęte zasady stylu programowania i tworzą 'nowe' własne zasady, które de'facto mają zastosowanie i odniesienie zazwyczaj tylko i wyłącznie do ich własnego kodu.
P-9991
GoldWolf
» 2009-09-01 12:08:21
Amen.Wydrukować i w ramkę ;-). Na artykuł by się nadawało jak nic. Moje obecne umiejętności(albo ich brak) nie pozwalają zrozumieć całości, ale może kiedyś do tego dorosnę.
Taka niespodzianka, nie spodziewałbym się takiego zaangażowania z Twojej strony chapeau!
P-9992
aRusher
Temat założony przez niniejszego użytkownika
» 2009-09-01 15:03:57
Nie wiem jakiego kursu używasz i kto ten kurs pisał
Czytam książkę, którą zapewne znacie (pytanie czy od złej, czy dobrej strony) - "Symfonia C++" Jurka Grębosza.

ja takie rzeczy robię, jak ktoś mnie zdenerwuje i mam chwilę czasu
Znaczy się, kto był tym, który Cię zdenerwował? :D
Jako laik, mam kilka pytań:

głównie dlatego, że to "deklarowanie o co chodzi" jest tak łysy grzywką o kant kuli - nigdy się nie zdarzyło, żeby jawne rzutowanie przyczyniało się do poprawy jakości softu, zaś potrafi się stać źródłem błędów (bez rzutowania kompilator mógłby wywalić z powodu jakiejś nieścisłości warning, a tak się go chamsko oszukuje).
Mam to rozumieć jako zachętę do rezygnacji z jawnego rzutowania w C++ na korzyść niejawnej konwersji (np. gdy wpisuję do obiektu typu double wyrażenie typu int i na odwrót)?

Twórcy C++ nie mogli sobie pozwolić na taki wyrwy, uważając je za uzasadnioną niezgodność. Nie ma więc nic takiego, jak typ uniwersalno-wskaźnikowy
Czyli wskaźniki typu void (opisane w czytanym przeze mnie kursie), to również (jak NULL) pozostałość po C, z której nie powinno się korzystać?

rozstrzyganie przeciążenia przy podanym NULL jest zawsze na korzyść int,
Nie doszedłem jeszcze do tego działu, ale u mnie nazywa się to przeładowanie. Czy masz jakiś powód, dla którego nazywasz to przeciążeniem? Czy to całkowicie zamienne. Opierając się na moim kursie - po niemiecku jest: uberladen, po francusku: recharger, po angielsku: overloaded (tu już najbliżej przeciążenia).

Prócz tego, co to jest wyrażenie bezstanowe?
P-9994
aRusher
Temat założony przez niniejszego użytkownika
I jeszcze jedno: jeśli wiecie coś o "Symfonii"...
» 2009-09-01 18:21:03
Nie, void* to nie pozostałość. Oczywiście, jeśli można to void* należy unikać, używając w zamian wskaźnika do typu, o który naprawdę nam chodzi.
No, ale wcześniej napisałeś, że w C++ nie ma czegoś takiego, jak typ uniwersalno-wskaźnikowy. A void* takim... chyba... jest.

---

literałów == stałych dosłownych?

---

I jeszcze jedno: jeśli wiecie coś o "Symfonii", wyraźcie swoją opinię na temat tej pozycji. W środowisku, w którym się obracałem, opinia o tym podręczniku jest świetna, znam fanów, żeby nie powiedzieć fanatyków Grębosza - sam odnoszę podobne wrażenie, prócz tego widać, że jest bardzo "newbie-friendly".
P-9995
GoldWolf
» 2009-09-01 20:01:13
żeby nie powiedzieć fanatyków Grębosza - sam odnoszę podobne wrażenie, prócz tego widać, że jest bardzo "newbie-friendly".Ja akurat nic dobrego o niej nie powiem, kupiłem sobie od razu 3 tomy. Przerabiałem ale odniosłem odmienne wrażenie. Dla mnie nie była tak dobra, jak książka, którą wcześniej miałem o C i bardzo mi się podobała autora Stephen Prata . Gości na szczęścia napisał też coś o C++, Język C++. Szkoła programowania. Wydanie V Stephen Prata - dla mnie po prostu ta książka jest lepsza.

Na forum też kilka osób poprze pozycję Grębosza, no i oczywiście Thinking in C++ również pozycja polecana.
P-9996
pompom
» 2009-09-01 20:45:37
@ten_zuy - wall of text (słyszałeś o czymś takim jak akapity?), który wiele nie wnosi. Napisałeś tylko, że z punktu widzenia kompilatora C++ między 0 a NULL nie ma różnicy.

0 - wartość liczbowa.
NULL - pusty adres.
'\\0' - koniec stringa w asciiz.
I tak należy pisać. Informujesz wtedy czytającego, co przypisujesz. C++ nie wspiera 'wartości pustej' bezpośrednio - więc to właśnie kwestia dobrego stylu.
P-9997
aRusher
Temat założony przez niniejszego użytkownika
» 2009-09-01 20:49:58
Ale chyba mogę ukończyć podręcznik Grębosza, bez obaw o moją programistyczną przyszłość? Mógłbyś podać przykłady takich 'grębosizmów"?

@up: czyli NULL to słowo kluczowe?
P-9998
« 1 » 2 3
  Strona 1 z 3 Następna strona