Jste zde

C

Programovací jazyk C

Méně známé skutečnosti o C a C++: Makra s proměnným počtem parametrů

S funkcemi, které berou proměnný počet parametrů ("nerdy speaking", mají proměnnou aritu), už se zřejmě každý setkal (nejznámějším příkladem je dvojice funkcí scanf() a printf()). V C99 byla zavedena podpora i pro makra s proměnným počtem parametrů (variadic macros, někdy překládáno jako "variadická makra"). Jak taková věc vypadá a k čemu to lze použít se dozvíte v následujícím příspěvku.

Méně známé skutečnosti o C a C++: Vztah mezi znakem a bajtem

Na námět jednoho mého čtenáře (fakt, ono zřejmě někdo ty moje příspěvky čte! :] j/k) se v tomto příspěvku budu zabývat vztahem mezi znakem (character) a bajtem (byte) v jazycích C a C++. Mimo jiné se dozvíte, proč strlen() vrací vždy počet bajtů v předané posloupnosti ukončené nulovým bajtem a proč nemůže sloužit k tomu, aby vracela počet širokých znaků (wide characters) předaného řetězce, např.

Méně známé skutečnosti o C a C++: Proč nemůže existovat LL(k) gramatika pro jazyk C

V tomto příspěvku naznačím důvod, proč nemůže pro jazyk C existovat LL(k) gramatika pro libovolné konečné k. Příspěvek si asi užijí jen ti, kteří mají určité základy z oblasti teorie formálních jazyků a překladačů, ale do žádných složitých detailů se pouštět nebudu.

Céčkový příkaz switch a generování kódu v gcc

Při čtení "Dračí knihy" (Dragon book) jsem narazil u jednoho příkladu ruční implementace konečného automatu na poznámku, že nezáleží na pořadí uvedených case větví v příkazu switch, protože překladač to optimalizuje, a tudíž, i když tu nejméně pravděpodobnou variantu dáme na začátek, tak to nebude mít na výkon žádný vliv.

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.

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.

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++: 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!

Méně známé skutečnosti o C a C++: C není jen ANSI C a C++ není jen C++98

Tímto zahajuji další "seriál" týkající se jazyků C a C++. Chtěl bych v něm upozornit na některé skutečnosti, které si ne každý uvědomuje a také některé vlastnosti těchto jazyků, které nejsou příliš známé a nebo se jejich důležitost podceňuje, což mnohdy může vést k nečekaným problémům. Objeví se zde určitě i zajímavé vlastnosti či konstrukce a využití těchto jazyků, o kterých se obecně neví, že něco takového je v těchto jazycích možné.

Stránky

Přihlásit se k odběru RSS - C