Argumentum nélküli függvények és régi stílusú C deklarációk
Az argumentum nélküli nesC függvényeket () –vel deklaráljuk, nem pedig (void) –al. Az utóbbi fordítási idejű hibát vált ki.
A régi stílusú C deklarációk (()-el ) és függvény definíciók nem használhatók az interfészekben és a komponensekben.
Ezek a változások nem vonatkoznak a C fájlokra, azaz a már elkészített .h fájlokat változtatás nélkül használni lehet.
Attribútumok
A nesC használja a gcc __attribute__ szintaktikáját a függvények néhány tulajdonságának leírására.
Ezek az attribútumok mind a függvény deklarációnál, mind a függvény definíciónál megadhatók.
A függvényhez tartozó attribútumok ezeknek az összessége.
Az attribútum megadásának szintaktikája:
init-declarator-list: also
init-declarator attributes
init-declarator-list , init-declarator attributes
function-definition: also
declaration-specifiersopt declarator attributes declaration-listopt compound-statement
attributes:
attribute
attributes attribute
attribute:
__attribute__ ( ( attribute-list ) )
attribute-list:
single-attribute
attribute-list , single-attribute
single-attribute:
identifier
identifier ( argument-expression-list )
A nesC két attribútumot támogat:
-
C : Ezt az attribútumot olyan C deklarációknál és definícióknál használjuk, amelyeket a külső globális hatókörbe akarunk helyezni.
Ez tehát azt mondja meg, hogy ezt inkább a C globális hatókörben akarjuk használni, mint egy modulban. Ezáltal ez elérhető lesz C-beli kódból.
-
spontaneous : Ezt az attribútumot minden f függvényre lehet alkalmazni (mind C-belire mind modulokban).
Ez az attribútum jelzi, hogy az f-nek létezik olyan hívása, amely nem látható a kódból.
Tipikusan ilyenek a hardver felől érkező megszakítás események, illetve a C main függvénye.
Példa:
module RealMain { ... }
implementation {
int main(int argc, char **argv) __attribute__((C, spontaneous)) {
...
}
}
Ebben a példában a main-nek nyílván a C globális hatókörben kell elhelyezkednie, hogy a linker meg tudja találni.
Mivel a main –t kívülről hívják (a kódban egyáltalán nem is létezik rá hívás), ezért ez egy spontán függvény.
Fordítási idejű konstans függvények
A nesC-ben van egy új konstans kifejezés: a konstans függvény. Ezek a függvények a nyelvben vannak definiálva, és arra valók,
hogy fordítási időben kiszámoljanak egy konstanst. Bár több ilyen függvény bevezetését tervezik, jelenleg csak egy van, a unique.
Deklarációja:
unsigned int unique(char * identifier)
Visszatérési értéke: ha a függvényre n db hívás érkezik ugyan azzal az identifier –el, akkor minden hívásnál egy más értéket ad vissza a 0…n-1 intervallumból.
Ez a függvény nagyon hasznos paraméterezett interfészek használatakor: ha egy K komponens megvalósít egy paraméterezett interfészt, akkor ennek a függvények a segítségével azonosítani tudja a felhasználókat.