Programovací jazyk C
Dnes se v našem seriálu o chybách v návrhu podíváme na situace, při nichž bychom plnohodnotným využíváním typového systému zpřehlednili kód a učinili jej méně náchylným k chybám.
Programovací jazyk C
Dnes se v našem seriálu o chybách v návrhu podíváme na situace, při nichž bychom plnohodnotným využíváním typového systému zpřehlednili kód a učinili jej méně náchylným k chybám.
Dnes se podíváme na používání proměnné s nepříliš popisným názvem: flag
.
Pravděpodobně víte, že u for
cyklů v C (od C99) a C++ lze iterační proměnnou definovat přímo v inicializační části cyklu, tedy např. for (int i = 0; ...)
. Dokonce lze proměnných definovat více, např. for (int i = 0, j = 1; ...)
. V takovém případě ale musí mít shodný typ. Co když ale potřebujeme iterovat přes více proměnných, jejichž typ se liší? Je to možné, nebo je potřeba jednu z nich definovat před cyklem? Odpověď se dozvíte v tomto příspěvku.
Jak jistě víte, bezznaménková (angl. unsigned) čísla v C a C++ mohou nabývat hodnot od 0 do 2^sizeof(typ) - 1
. Jejich hodnota tedy není nikdy záporná. Co se ale stane, když provedete unární mínus na bezznaménkovém čísle? Něco, co zřejmě neočekáváte.
Dnes se mrkneme na podmínky, ve kterých se explicitně provádí porovnání s pravdivostní hodnotou a ukážeme si, jak je udělat čitelnější.
V dnešním díle seriálu o chybách v návrhu se podíváme na nešvar, který znepříjemňuje práci uživatelům knihoven: nekonzistentní rozhraní.
Minule jsme si ukázali, proč nezahrnovat implementaci do hlavičkových souborů. Dnes se podíváme na to, jak urychlit překlad použitím tzv. dopředných deklarací.
V příspěvku se dozvíte, proč dávat přednost umisťování implementace do .c
/.cpp
souborů, nikoliv do hlavičkových souborů.
Možná jste se již setkali s různými zápisy použití operátoru sizeof
. Konkrétně se jedná např. o zápisy sizeof(int)
, sizeof(*p)
a sizeof *p
. Jaký je mezi těmito zápisy rozdíl a kdy je nutné použít závorky se dočtete v následujícím příspěvku.
Se standardní funkcí exit()
, která ukončí běh programu, se již asi setkal každý, kdo alespoň trochu programoval v jazyce C. Tato funkce spadá do kategorie funkcí, které se po zavolání nevracejí na místo, odkud byly volány. Méně se však ví, že kromě zmiňované funkce exit()
je v jazyce C řada dalších funkcí, které vykazují podobné chování. A právě o nich bude tento příspěvek. V závěru se také podíváme na nové klíčové slovo _Noreturn
, které je v souvislosti s tímto tématem k dispozici od ISO C11 (nejnovější standard jazyka C).