Jazyky C a C++ (Ukázka, strana 99)

Page 1

❚ P ři jakékoli manipulaci s objektem, na který ukazuje restringovaný ukazatel, bychom měli používat pouze tento ukazatel a hodnotu tohoto ukazatele bychom neměli přiřazovat jiným ukazatelům. ❚ R estringovaný ukazatel by měl v jednom bloku ukazovat stále na stejný objekt. ❚ K objektu, který se v daném bloku nemění, lze přistupovat i prostřednictvím několika restringovaných ukazatelů. ❚ K dyž uvedená pravidla porušíme, může se program chovat nedefinovaným způsobem (při optimalizaci může vzniknout nesprávný kód). ❚ P oužijeme-li modifikátor restrict v deklaraci parametrů funkce f(), umožníme tím překladači provést efektivní analýzu závislostí funkce f(), aniž by musel zkoumat všechna její volání v programu, a podle toho bude moci optimalizovat její kód. Toto zkoumání se však přenáší na bedra programátora, který si musí při každém volání uvědomit, zda použité parametry nepovedou k nedefinovanému chování.

PŘÍKLAD Na úrovni souboru jsme deklarovali ukazatele int * restrict a; int * restrict b; int * c;

Tím tvrdíme, že přistoupíme-li k nějakému objektu prostřednictvím jednoho z těchto ukazatelů, a je-li tento objekt někde v programu měněn, nebudeme k němu přistupovat prostřednictvím druhého z nich.

PŘÍKLAD Použijeme-li modifikátor restrict v deklaraci parametrů funkce následujícím způsobem, void f(int n, int * restrict p, int * restrict q) { while(n-- > 0) *p++ = *q++; }

zavazujeme se tím, že při žádném volání této funkce nebude ukazatel p přistupovat ke stejnému objektu jako ukazatel q. Tento příklad ukazuje obě protikladné stránky používání modifikátoru restrict. Například volání extern int A[100]; f(50, A, A+50); // OK

je v pořádku, zatímco volání f(50, A, A+1); // NEDEFINOVANÉ CHOVÁNÍ

může způsobit nedefinované chování programu. Problém je v tom, že s prvky A[1] až A[49] pole A pracujeme v rámci jediného volání funkce f() jak pomocí restringovaného ukazatele p, tak i pomocí restringovaného ukazatele q.

98  Jazyky C a C++ Ukázka elektronické knihy, UID: KOS180894


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.
Jazyky C a C++ (Ukázka, strana 99) by Kosmas-CZ - Issuu