wieczniezielony
wieczniezielony
#naukaprogramowania #cpp

Czy i jak moge uzyc nullptr, majac wczesniejsza wersje od c++ 11?

Na uczelni nie ma c++ 11, wiec mi sie tam nie skompiluje, a musi.
1
  • Najlepsze
  • Wszystkie komentarze
piszczalka
@wieczniezielony Rozumiem, że chodzi Ci o Code::Blocks. To jest tylko IDE, a ja pytam o kompilator.
1
wieczniezielony
wieczniezielony
@vydyah: Jest apka. Tylko takie rozwiazanie biore pod uwage. Zaraz pobiore, ale wydaje mi sie, ze obsluguje nawet plik.txt.

@piszczalka: @wolodia: No jesli macie ochote to mozecie spojrzec: https://pastebin.com/Nk198pCp (chodzi konkretnie o linie 72).

Teraz tak sobie mysle, ze w pliku mozna dodac spacje na koniec, albo tak jak w for sprawdzac czy nie przekroczylo dlugosci.
1
wolodia
Ma prawo być NULL bo jest definiowany tak

#define NULL 0


@piszczalka: @wieczniezielony: Niekoniecznie! NULL jest implementation-defined, z tym że musi to być wyrażenie na liczbach całkowitych dające zero. A ponieważ większość implementacji wybiera właśnie zero, to dlatego ten kod działa. Ale działa tylko i wyłącznie przez przypadek, gdyż najzwyczajniej jest to logicznie niepoprawne.

Nie ma żadnego powodu aby stosować tam NULL zamiast 0, to tylko
1
piszczalka
@wolodia Masz absolutną rację.
1
piszczalka
@wieczniezielony Jak to nie ma? Gdzie Ty się ksztalcisz, w muzeum?
0
wieczniezielony
wieczniezielony
@piszczalka: No nie ma.
0
piszczalka
@wieczniezielony Ok, jakich kompilatorów używacie na uczelni?
0
wieczniezielony
wieczniezielony
@piszczalka: C::B
0
vydyah
vydyah
@wieczniezielony: jak jakies male projekty to polecam odpalac online
0
vydyah
vydyah
szczegolnie http://repl.it bo szybkie
0
wieczniezielony
wieczniezielony
@piszczalka: Znowu mi sie pomylilo... Ale wstyd XD GCC/celang - wedle uznania.
@vydyah: Wlasnie mialem pytac o link, dzieki, napewno sie przyda.
0
vydyah
vydyah
@wieczniezielony - oki, jak chcesz fajne srodowiska z linuksem online i fajnymi edytorami to polecam rzeczy typu codeanywhere, cloud9 (dawno nie korzystalem wiec nie wiem czy jeszcze darmowe), ja na tym pisalem bardziej javowe rzeczy i dzialalo ladnie. Wiem ze niektore maja ta wersje Eclipse dzialajaca w przegladarkach i fajnie sie pisze.
0
piszczalka
@wieczniezielony Starsze gcc nie miały domyślnie włączonego C++11. Trzeba to włączyć przy pomocy flag. No chyba, że są to tak stare wersje, że nawet tego nie mają. Nie użyjesz wtedy niczego z nowszego standardu.
0
wieczniezielony
wieczniezielony
@vydyah: Kurcze, rozwiazales wlasnie moj problem z IDE na telefon. Szukalem czegos sensownego, bo wszytko na co trafialem to bylo gowno, a tu prosze. Ten codeanywhere wyglada obiecujaco.

@piszczalka: No to raczej pozamiatane. Dodam kom, ze jak zostanie NULL to moze sie wywalic i jak sie da to zmieniac na nullptr, bo nie mam pomyslu jak to inaczej rozwiazac. Trafie 0 z danych i sie wysypie;/
0
piszczalka
Dodam kom, ze jak zostanie NULL to moze sie wywalic i jak sie da to zmieniac na nullptr, bo nie mam pomyslu jak to inaczej rozwiazac. Trafie 0 z danych i sie wysypie;/

@wieczniezielony oj, jeśli masz taki problem w kodzie to znaczy, że robisz coś głupiego
0
wieczniezielony
wieczniezielony
@piszczalka: No nie mam innego pomyslu. Musze przejsc po stringu w petli i warunkiem zakonczenia jest przekroczenie rozmiaru lub string[i] == /0. Gdy bylo tylko przekoczenie rozmiaru petla sie nie konczyla.
0
vydyah
vydyah
@wieczniezielony nom, nie korzystalem z tego za duzo ale musi byc tez bardzo pamieciozerne wiec ciekawe jak z ladowaniem codeanywhere na telefonie. Kiedys korzystalem z koding.com ale odkad zaprzestali dostarczania wlasnych maszyn wirtualnych i kazali sie podlaczac np do AWS to zrezygnowalem.
0
wolodia
No to raczej pozamiatane. Dodam kom, ze jak zostanie NULL to moze sie wywalic i jak sie da to zmieniac na nullptr, bo nie mam pomyslu jak to inaczej rozwiazac. Trafie 0 z danych i sie wysypie;/


@wieczniezielony: No coś na pewno robisz źle. NULL może powodować problemy jedynie przy czymś takim:

void f(int) {}
void f(double * ptr) {}
f(NULL);
0
wolodia
@wieczniezielony: Buduj projekt w oparciu gcc z włączonymi flagami do np. C++11(C++0x). Natomiast jeśli naprawdę nie możesz (co byłoby ciężkim absurdem) albo wersja gcc na komputerach uczelnianych jest wybitnie stara, to wtedy najlepiej użyć makra __cplusplus aby wykryć brak wsparcia dla C++11 i zaimplementować coś prostego samemu, np. taka prosta implementacja umieszczona w namespace std.

Można także po prostu zrobić coś takiego #define std::nullptr NULL, ale nie jest to
0
vydyah
vydyah
@piszczalka jak to trafisz 0 z danych? dawno nie programowalem w C ale czy da sie w ogole dostac \0 podczas wczytywania danych?
0