DevCpp - problem z typem bool oraz kompilatorem

0

Witam,
Mam taki mały problem, a nawet dwa. Pierwszy jest dość niecodzienny. DevCpp w najnowszej wersji zdaje się mieć problem ze standardem C99 - otóż w ogóle nie rozumie co ja od niego chcę pisząc 'bool' ;) Ten ciąg znaków jest dla niego niezadeklarowaną zmienną. Co z tym zrobić? Gdzie tkwi problem
Druga sprawa zupełnie innej maści, jednak również związana z kompilatorem. W jaki sposób mogę updateować gcc i minigw? Niby jest tam wbudowany manager, jednak repozytoria są martwe i nie rozwiązują tego problemu. Czy komuś udało się sukcesywnie rozwiązać ten problem?

Z góry dzięki za pomoc =]

0

Jedyne właściwie rozwiązanie tego problemu to usunięcie Deva i instalacja jakiegoś porządnego, dopracowanego i aktualizowanego środowiska. Jak chocby Code::Blocks ;]

0

Emmm tak, jest to jakaś opcja ;) Jednak cytując pierwsze zdanie ze strony głównej tego programu:
"Code::Blocks is a free C++ IDE built to meet the most demanding needs of its users" mam wątpliwości czy w ogóle jest w stanie spełnić moje wymagania - tj kompilacja języka C?

0

Nie będzie z tym żadnego problemu ;)

0

Po instalacji jestem bardzo mile zaskoczony ;) Kupa świetnych ficzerów i wszechstronność jest jak widzę jego mocną stroną ;) Zobaczymy jak będzie mi się z niego korzystało =]

Wielkie dzięki ;) Masz u mnie piwo ;P

Korzystając z okazji: czy bool x[8] zajmie 1 bajt czy 8 bajtów?

0

Zmienna typu bool zajmuje 1 bajt, nie 1 bit ;)

// a co smieszniejsze mozesz zawsze zamiast bool uzyc int, char czy ktoregokolwiek z typow staloprzecinkowych [mf]

0

Tak, tak... wiem ;) Co do bool'a to zapytałem tak z ciekawości, bo w zasadzie nie miałem okazji nigdy korzystać z tego na większą skale, a teraz mam taką potrzebę. Patrząc na to: Typy danych, ktoś jednak zrobił byka. Myślałem, że może nowsze standardy C radzą sobie jakoś z podziałem bajta, bo w końcu bool zajmuje 1bit tylko reszta bajta pozotaje wolna.

0

@Krzycho - Nie byłoby problemem dla kompilatora sprawienie żeby bool był przechowywany w 1 bicie. Ale takie coś byłoby wolniejsze, a strata pamięci przecież nie jest taka straszna (często ci się zdarza umieszczać w zakresie globalnym zmienne typu bool? Stracisz na tym może 20-30 bajtów w większej aplikacji ;) )

edit: przeglądnąłem tamten artykuł - w sumie to cała tabelka nadaje się do usunięcia bo nigdzie nie pisze że typ x ma y bajtów i zakres xyz. To takie uproszczenie oparte na obecnej implementacji.

0

Potwierdzam, ten art jest troszkę bez sensu. Standard określa rozmiar char na 1 bajt. Poza tym standard IEEE 754 określa rozmiar float i double i to by było na tyle ;] Reszta to juz sizeof() ;]
@msm zdarza się w jakichś algorytmicznych programach że różnica byłaby duża (jak masz bardzo duże boolowskie tablice), ale w zwykłych programach raczej nie ma z tym problemu.

0
MSM napisał(a)

@Krzycho - Nie byłoby problemem dla kompilatora sprawienie żeby bool był przechowywany w 1 bicie

Tak wlasciwie, to bylby mega problem dla kompilatora który chciałby trzymać się standardu, ponieważ ów mówi, że różne wystąpienia różnych rzeczy mają mieć różne adresy (tzn. & na nich ma zwracac rozne wskazniki). W tym momencie, gdyby kompilator upchnal "bool a,b,c,d;" do jednego bajtu, mialby duzy problem zeby wygenerowac Ci podczas " &a, &b, &c, &d" cztery unikatowe, rozne numerki, niekolidujace z niczym innym, ktore potem przy *&c trafialy by prawidlowo w to samo (jednobitowe..) miejsce... "Pola bitowe" w strukturach i klasach to wyjątek, gdyż sekwencja definicji pól bitowych definiuje N części pojedynczego "ciągu bitowego", czy jakos tak.. a ów ciąg bitowy to dopiero jest ten byt który ma mieć ów 'unikalny adres' - jego pod-cząstki nie muszą, nie są niezależnymi bytami, stad dwa pola char:4 maja prawo być upakowane w jeden bajt. itp blahblah.. IMHO, bool=1bit = duzy problem.

A art faktycznie lichawy.. jak bede mial moment to go przeryję, wyleci albo przetlumacze jakas lepsza wersje z cplusplus, cppreference albo parashift..

0

vector<bool> za to jest skompresowaną tablicą booli (wyspecjalizowany szablon) tzn że jeśli zrobisz:

vector<bool> asd;
asd.resize(8);

to rzeczywiscie zajmie 1 bajta (przynajmniej tak jest napisane tutaj:
http://www.cplusplus.com/reference/stl/vector/
na dole strony)

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