Tag: C++


  • Używasz goto w C++ i nawet o tym nie wiesz!

    Język C++ udostępnia stosowanie dyrektywy goto realizującej skok bezwarunkowy do wskazanego miejsca w kodzie. We wpisie dotyczącym paradygmatów programowania wskazałem, że według paradygmatu programowania strukturalnego jest to dyrektywa wysoce odradzana. Kod maszynowy C++ jest językiem kompilowanym do kodu maszynowego procesora. Zadaniem kompilatora jest tłumaczenie języka wysokiego poziomu do języka niskiego poziomu. W tym miejscu kompilator…

  • Helgrind nie przepada za Google Test

    Helgrind nie przepada za Google Test. Za Boost Test również. I za Catch2 też. Właściwie to nie przepada za każdą biblioteką do testów automatycznych wykonującą wiele przypadków testowych w ramach pojedynczego wywołania programu z testami. Helgrind to narzędzie w ramach oprogramowania Valgrind służące do wykrywania problemów związanych z synchronizacją wątków. Helgrind potrafi między innymi wykrywać:…

  • W jaki sposób działa wirtualne dziedziczenie?

    Cechą charakterystyczną języka C++ jest wielodziedziczenie. Jest to mechanizm, który w pewnych okolicznościach może być użyteczny, jednak wiąże się z niebezpieczeństwem – z problemem Deadly Diamond of Death1. Propozycją rozwiązania problemu jest wirtualne dziedziczenie. Problem typu diamond Problem Deadly Diamond of Death został zaprezentowany w poniższym kodzie: Kod może być przedstawiony w postaci następującego diagramu:…

  • Wyrównanie pamięci w C++ (alignment and padding)

    Wyrównanie pamięci w C++ służy optymalizacji czasu potrzebnego do zapisu komórek pamięci rejestrach procesora. W Wikipedii można przeczytać, że: Wyrównanie pamięci jest silnie związane z architekturą procesora oraz użytym kompilatorem. W dalszych rozważaniach przyjęto architekturę x86-64 oraz kompilator g++ w wersji 15.0. Wyrównanie pamięci Rozważmy następujące struktury danych: Powyższy kod zawiera 3 struktury danych: OptimalA,…

  • Technika X-Macro, czyli jak preprocesor pomaga osiągnąć DRY

    Temat DRY był poruszany między innymi we wpisie o czystym kodzie. Tym razem zostanie zaprezentowana technika X-Macro oraz w jaki sposób ogranicza zbędne powtórzenia w kodzie. W języku C występują makra – elementy języka podobne w działaniu do funkcji typu inline. W przeciwieństwie do funkcji, makra mogą być definiowane oraz usuwane. Podczas kompilacji w miejsce…

  • Paradygmaty programowania w C++

    W poprzednim wpisie poruszaliśmy temat paradygmatów programowania. Dziś przedstawimy subiektywnie popularne paradygmaty programowania w C++. Paradygmaty Język C++ jest językiem umożliwiający bardzo swobodne projektowanie oraz programowanie. W zasadzie obowiązuje tylko jedna reguła, która jest zgodna z paradygmatem programowania imperatywnego: to co zostało zaprogramowane zostanie w takiej formie wykonane przez procesor. Pozostałe paradygmaty programowania są dobrowolne…