Definice funkcí jazyka C
Definice funkce určuje název funkce, typy a počet parametrů, které očekává přijetí, a jeho návratový typ. Definice funkce obsahuje také tělo funkce s deklaracemi místních proměnných a příkazy, které určují, co funkce dělá.
Syntaxe
translation-unit
:
external-declaration
translation-unit
external-declaration
external-declaration
: /* Povoleno pouze v rozsahu externího (souboru) */
function-definition
declaration
function-definition
:
declaration-specifiers
opt opt declarator
declaration-list
attribute-seq
compound-statement
/* attribute-seq
je specifický pro Microsoft */
Prototypové parametry jsou:
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
volit
type-specifier
declaration-specifiers
volit
type-qualifier
declaration-specifiers
volit
declaration-list
:
declaration
declaration-list
declaration
declarator
:
pointer
volit direct-declarator
direct-declarator
: /* Deklarátor funkce */
direct-declarator
(
parameter-type-list
)
/* Deklarátor nového stylu */
direct-declarator
(
identifier-list
opt )
/* Zastaralé deklarátor stylu */
Seznam parametrů v definici používá tuto syntaxi:
parameter-type-list
: /* Seznam parametrů */
parameter-list
parameter-list
, ...
parameter-list
:
parameter-declaration
parameter-list
,
parameter-declaration
parameter-declaration
:
declaration-specifiers
declarator
declaration-specifiers
abstract-declarator
volit
Seznam parametrů v definici funkce starého stylu používá tuto syntaxi:
identifier-list
: /* Používá se v definicích a deklaracích funkcí zastaralého stylu */
identifier
identifier-list
,
identifier
Syntaxe těla funkce je:
compound-statement
:
{
declaration-list
opt opt statement-list
}
Jediné specifikátory třídy úložiště, které mohou upravit deklaraci funkce, jsou extern
a static
. Specifikátor extern
označuje, že na funkci lze odkazovat z jiných souborů. To znamená, že název funkce se exportuje do linkeru. Specifikátor static
označuje, že na funkci nelze odkazovat z jiných souborů. To znamená, že název není exportován linkerem. Pokud se v definici funkce nezobrazí žádná třída úložiště, extern
předpokládá se. V každém případě je funkce vždy viditelná z bodu definice na konec souboru.
declaration-specifiers
Volitelné a povinné declarator
společně určují návratový typ a název funkce. Jedná declarator
se o kombinaci identifikátoru, který funkci pojmenuje, a závorky za názvem funkce. Nepovinný attribute-seq
neterminal je funkce specifická pro Microsoft definovaná v atributech funkce.
( direct-declarator
v declarator
syntaxi) určuje název definované funkce a identifikátory jeho parametrů. Pokud obsahuje direct-declarator
seznam parameter-type-list
, určuje typy všech parametrů. Tento deklarátor slouží také jako prototyp funkce pro pozdější volání funkce.
A declaration
v definicích funkce nemůže obsahovat jiné než storage-class-specifier
register
.declaration-list
Syntaxi type-specifier
declaration-specifiers
lze vynechat pouze v případě, že register
je třída úložiště určena pro hodnotu int
typu.
Je compound-statement
tělo funkce obsahující deklarace místních proměnných, odkazy na externě deklarované položky a příkazy.
Části Atributy funkce, třída úložiště, návratový typ, parametry a tělo funkce podrobně popisují komponenty definice funkce.