Jak to się nie da, da się, wystarczy myśleć. C jest dla myślących.
Jak to się nie da, da się, wystarczy myśleć. C jest dla myślących.
Czyli jak proponujesz napisać ten kod w C aby stał się bezpieczny i nie pozwalał na akcepację złej flagi do funkcji?
To jest cytat z nagłówka, dowolnego dostarczonego przez producenta CPU zestawu funkcji. Na przykład do serii SAM7 Atmela, ale pełno tego wszędzie.
To nie ja piszę.
To tradycja embedded.
Z prostych: a) wie, że jest std::size. Ty już wiesz. Nie użyje sizeof. Po co miałby to robić, przecież to do czego innego. b) wcale nie potrzebuje sizeof. Potrzebuje [boost|std]::size bo taki jest kontekst i cel użycia. To jest pierwotna potrzeba. sizeof to tylko workaround sprzed 30 lat na brak size. Przyznaje, popularny do dzisiaj.
Nie. Tutaj (w embedded) nawet jeśli ktoś wie, że jest lepiej, to nie używa. Ideologia, z resztą typowo konserwatywna.
Właśnie się nauczyłeś. Za darmo. Zajęło to sekundy. Zostanie na całe życie.
Nawet jesli użyjesz tylko tej 1 konstrukcji, to dzięki temu, że masz już C++ może nastepnym razem wpiszesz w google "jak zrobic w C++ takie coś" i okaże się że jest to już załatwione w boost/std. Tam jest ogólnie dużo rzeczy załatwione.
Kosz błedu sizeof w debugu runtime wielokrotnie przekracza koszt kilku sekund, które juz straciłeś na poznanie std::size.
Nie. C jest dla myślących o *wszystkim* na raz. C++ dla myślącym o celu jaki chcą osiągnąć, zamiast wymyślaniu kwadratowych kół.
W życiu tego nie użyję. Zawodowcy niech się bawią w takie herezje.
Nie mailem żadnego kosztu tego buga, bo jego obejscie zajęło sekundę, po prostu wyłaczylem kod, gdzie występował. Proste i banalne. Nie programuje zawodowo dla samego programowania. Programowanie u mnie jest przykrą koniecznością uzyskania jakieś funkcjonalności. Robię to zazwyczaj jednorazowo i więcej do tego nie wracam.
Nie widzę nic złego w myśleniu o wszystkim na raz. Cel można osiągnąć bez C++, nie przesadzajmy, że C++ to jedyna droga do osiągnięcia celu.
Prosto.
Śmierć frajerom.
Innymi słowy wybirasz kijek a nie siekierkę.
Masz prawo.
To po co ten kod był skoro wyłączenie było możliwe?
Ale zdajesz sobie sprawę, że sizeof()/sizeof() to jest powszechnie używany workaround i koszta jego obsługi są wieksze, niż w prostym, hobbystycznym przykładzie?
Jesli to miganie diodami, dla potrzeb hobbystycznych, to nie ma problemu. Uzywaj co uważasz za słuszne.
Problemy są w większej skali, gdzie takie konstrukcje kosztują konkretne pieniądze po stronie firm, przepalane na debugowanie w kółko tych samych błedów.
Zawodowcy też nie programują dla programowania. Programują dla pieniędzy. Dlatego szukają metod, aby ich programowanie było efektywniejsze - wtedy zarobisz więcej. C++ to jedna z takich metod.
Tym bardziej polecam ucieczkę z C do czegoś bardziej abstrakcyjnego. Ostatnio popularny jest microPython.
Co jest biegunowo odległe od branzy języków programowania, które od dziesiątek lat staraja się, aby programista nie myślał o wszystkim, tylko myślał o celu, coraz to wymyslając nowe paradygmaty, składnie, języki, coraz to bardziej abstrakcyjne.
C++ to pikuś w porównaniu z wieloma innymi abstrakcjami, jak Clojure.
To myślenie to "Turing completeness". Jest typowym argumentem który ma się nijak do rzeczywistości. Napisanie dowolnego algorytmu w dowolnym języku jest możliwe. No i co z tego?
Problem w tym, że chcemy to robić wydajniej, szybciej, redukując błedy, koszta itd itp.
Tak, wszystko można napisać w C. Prosze jednak, aby tego nie robić. Są lepsze sposoby wqrwiania ludzi, niż wyciąganie trupa z szafy.
Nie da się w prosty sposób. Ten język nie dysponuje niczym na poziomie kontroli składni kodu usera poza popsutym preprocesorem.
Widziałem zrobione to na makrach.
Nie działało dobrze, ale za to zajmowało kilkadziesiąt kB makr.
Wynajdywanie popsutego C++ jest typowym zagadnieniem w embedded.
Mam najdzieję, że nie pracujesz zawodowo z czymkolwiek majacym nawet odległy związek z programowaniem rzeczy niebezpiecznych.
Tak tak, sam Stroustrup przyznał, że wymyślił C++ by więcej zarabiać. Nic dodać nic ująć.
PA1 ^=1;
Dało się prosto? Dało! Widzisz flagi? Makra? Inne herezje?
Do wypisywania komunikatów z debugu niewiele przydatnych mi rzeczy (nie jestem autorem tego kodu). Pierwsze co zrobiłem to go wyłączyłem. I tak sobie w zgodzie żyliśmy miesiącami a wypełniacz BT[] wjeżdżał sobie na inną obok nieużywaną tablicę. A wróciłem do niego raczej zaciekawiony skąd się bierze bo niezauważywszy braku drugiego const, błędnie założyłem, że cała tablica jest w rom. Gdyby tak było, a nadal wskaźniki byłby losowo puste, byłoby to ciekawe, nieprawdaż?
Więc nie zorzumiałeś po co to było.
Masz cytat? Chętnie zerknę.
Masz racje, przecięz to nie jest związane z tematem.
I nawzajem. Mam nadzieję, że C++ i "fachowcy" od tego są jak najdalej od czegokolwiek co ma jakikolwiek związek z programowaniem rzeczy niebezpiecznych.
Poszukaj, głośna sprawa. Oczywiście po fali hejtu jaka się na niego wylała przyznał, że żartował. Ale co biedak miał powiedzieć?? Każdy by powiedział, że żartował.
Z tematem głównym nie, z jednym argumentem poruszonym w dygresji już tak.
Trzabylo od razu powiedzieć, że u nas biją Murzynów. Chciałeś prosto, dostałeś. Po co komplikować proste do bólu rzeczy?
Kilka minut z google nic nie ujawniło. Może mam innego google. Podziel się linkiem, ja nie potrafię tej "afery" odnaleźć. Byc może masz na myśli:
Argumentem jest to, że C++ przyspiesza zarabianie pieniędzy, dzięki wyższej abstrakcji i bezpieczniejszemu kodowi.
Nie mam pojecia co to ma wspólnego z tym, że autor tego języka zarabia pieniądze. W dodatku majac niewieki wpływ na jego kierunek rozwoju, od bardzo dawna.
Niestety, tutaj muszę Cię zmartwić.
Have something to add? Share your thoughts — no account required.
Ask the community — no account required