Jste zde

programování

Zajímavosti i z jiných jazyků, než je C a C++

Jelikož programuji a zajímám se i o jiné jazyky než je C a C++ (Python, Haskell, Java, SQL, PHP, HTML/XML, CSS, JavaScript, LaTeX, Vimscript, minoritně o Prolog či různé assemblery, dříve Pascal), tak jsem se rozhodl, že občas napíšu i nějakou zajímavost z ostatních jazyků. Nebude to nijak závazné, ani neplánuji žádný pravidelný seriál, ale když při studiu/programování narazím na nějakou zajímavost, tak ji sem možná napíšu :). Témata na tom budou (co se týče obtížnosti) různá - především se ale asi bude jednat o pokročilá témata.

Zajímavé úlohy pro programátory v C a C++ #7

Minule se mně sice nikdo s řešením neozval (nevím, zda to bylo náročností úlohy nebo prostě tím, že jsou prázdniny), ale nevadí, zkusíme jinou úlohu :). Tentokrát jsem si hádanku vypůjčil z jednoho zdroje, který a priori uvést nemohu, protože pak byste se místo samotného řešení pokoušeli hledat řešení v onom zdroji :), ale po zveřejnění řešení ho samozřejmě uvedu. Kód jsem ale mírně upravil, aby to bylo zajímavější, takže není úplně shodný. Tentokrát se budou moct zapojit i ti, kteří znají "jen" Jazyk C.

Zajímavé úlohy pro programátory v C a C++ #6

Po půl roce sucha (konečně) přináším další zajímavou programovací úlohu. Tentokrát se jedná o úlohu pro programátory v C++ a na své si přijdou především milovníci bitových manipulací :). A nebojte, nebude to žádná úloha stylu "vytvořte makro pro vzájemné prohození polovin předaného intu".

Ladění pomocí nástroje valgrind - ukázky, jaké nejčastější chyby lze detekovat

Valgrind je open-source nástroj, který slouží především pro ladění paměťových chyb (umí toho víc, např. profilování, ale tím se teď zabývat nebudu).

Méně známé skutečnosti o C a C++: Impl. závislé vs nespecifikované vs nedefinované chování

Většina programátorů ví o tom, že některé konstrukce mají tzv. nedefinované chování a že by se jim měli vyhýbat. Méně se ale už ví, že kromě nedefinovaného chování norma definuje další typy chování: "specifikované", implementačně závislé a nespecifikované. Po přečtení tohoto příspěvku byste měli mít jasno, jaký je mezi těmito chováními rozdíl a kterým z nich se vyhýbat.

C++ kvíz

Asi jste si všimli, že už tady pár měsíců nebyla žádná úloha ze seriálu "Zajímavé úlohy pro programátory v C a C++". To plánuji v brzké době napravit a něco určitě vymyslím. Do té doby pro vás ovšem něco mám. Pokud rádi řešíte záludné otázky z oblasti jazyka C++, tak se určitě mrkněte na server mycppquiz.com, kde je spousta (aktuálně 75) otázek týkající se tohoto jazyka.

Méně známé skutečnosti o C a C++: Méně známá (či používaná) klíčová slova

Každý jazyk obsahuje určitou množinu klíčových slov a množinu rezervovaných slov (ta může být i prázdná, např. v jazyce Fortran, což má za následek možnost solidně zmást případného čtenáře zdrojového kódu :)) a programátor si časem osvojí většinu z těch, která se běžně používají (nebo nepoužívají, ale jsou nechvalně známá, např. goto). Kromě nich ale občas v jazyce existují klíčová slova méně známá, která, ať už z důvodu toho, že jejich význam pozbyl důležitosti či je většina překladačů nepodporuje, nebo se používají pouze ve speciálních případech. V tomto příspěvku bych se chtěl zaměřit na takováto klíčová slova v jazycích C a C++.

Méně známé skutečnosti o C a C++: Implicitní parametr funkce nemusí být konstanta

C++ v rámci větší uživatelské přítulnosti poskytuje kromě přetěžování (overload) funkcí/metod také implicitní (default) hodnoty parametrů funkcí/metod (na rozdíl od Javy, u které mně tento syntaktický cukr celkem chybí). Většina programátorů v C++ o tom ví a tuto skutečnost využívá. Co už se ale ví méně, je to, že implicitního parametr funkce nemusí být konstanta. V tomto příspěvku se nebudu zabývat tím, do jaké míry je to vhodné a použitelné (ve většině případů to totiž opravdu vhodné není), ale pouze tím, co C++ v tomto směru umožňuje.

Méně známé skutečnosti o C++: šablony jsou Turingovsky úplné

Oproti Java Generics či C# Generics (které jsou vlastně pouze typově parametrizované třídy) jsou šablony v C++ velice mocný nástroj - o tom určitě nikdo nepochybuje. Co se ale ví už méně, tak je to, že tento prvek jazyka C++ je turingovsky úplný (Turing-complete), čili, lidově řečeno, pomocí něj lze vyjádřit libovolný výpočet.

Méně známé skutečnosti o C a C++: NULL neslouží k přenositelnosti kódu

Tentokrát bych něco rád napsal o mýtu, který říká, že makro NULL slouží pro psaní přenositelného kódu, protože ne všechny architektury musí mít "nulový ukazatel" s adresou 0, ale daná adresa může být např. 0xFFFFFFFF. Ačkoliv druhá část předchozí věty pravdivá může být, tak první část nikoliv. Na konci příspěvku ukážu, že použitím makra NULL lze dokonce přenositelnost v určitých případech zhoršit!

Stránky

Přihlásit se k odběru RSS - programování