Re: Pár dotazù k C++

Ala ala na efton.sk
Středa Březen 12 14:31:15 CET 2014


>Co je  __attribute__ ?

Cokolvek zacinajuce dvomi podciarnikmi alebo jednym podciarnikom a velkym
pismenom je klucove slovo prekladaca (t.j. je zakazane uzivatelovi aj
tvorcovi kniznice definovat taketo identifikatory). Kedze normou
definovanych takychto klucovych slov je minimum (v C99 menovite tri, 
_Bool, _Complex a _Imaginary), vacsina z nich su specificke pre konkretny
prekladac.

V tomto pripade, __attribute__ pochadza z gcc, je mozne, ze ho na popud
popularity gcc ma implementovany aj iny prekladac.
http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html


----

Klucove slovo "static" ma v C (a pokial viem, aj v C++, ale ja nie som ++
pozitiv :-) ) dva diametralne odlisne aj ked ciastocne sa prekryvajuce
vyznamy: 
1. obmedzuje viditelnost identifikatora (meno funkcie, premennej), pri
ktorom je uvedeny, na subor, v ktorom sa nachadza

2. rusi automaticke obmedzenie trvania lokalnej premennej na jedno volanie
funkcie (dalsi rozdiel oproti "normalnej" lokalnej premennej je, ze ak
deklaracia takejto premennej obsahuje aj inicializaciu, tato sa na rozdiel
od "normalnej" lokalnej premennej vykona len raz, pri spusteni programu -
iny, mozno lepsie pochopitelny pohlad na lokalnu premennu oznacenu ako
"static" je teda ten, ze sa sprava ako globalna premenna, ktora je vsak
viditelna len vo vnutri funkcie).

V C (od C99) ma "static" este jednu pomerne malo znamu, pomerne obskurnu a
aj malo vyznamnu funkciu (ktoru myslim ze C++ nema) (C99 6.7.5.3):

3. ak sa pouzije pri deklaracii funkcie v parametri typu pole v hranatych
zatvorkach (a aj to len v "najvonkajsich", ak by sa jednalo o viacrozmerne
pole), znamena to zaruku pre prekladac, ze pri volani takejto funkcie toto
pole bude vzdy existovat v celej deklarovanej velkosti. (Toto je
optimalizacna "napoveda" prekladacu, vyznamna v tych pocitacoch, ktore
dokazu na zaciatku pola na nejaku instrukciu zacat citat pole do cache,
pricom vsak citanie z nejakej zle definovanej adresy (napr. NULL) by
vyvolalo vynimku z jednotky spravy pamati MMU).

Nenavidim C.

wek




Další informace o konferenci Hw-list