Dela via


C-funktionsdefinitioner

En funktionsdefinition anger namnet på funktionen, vilka typer och antal parametrar den förväntar sig att ta emot och dess returtyp. En funktionsdefinition innehåller också en funktionstext med deklarationerna för dess lokala variabler och de instruktioner som avgör vad funktionen gör.

Syntax

translation-unit:
external-declaration
translation-unit external-declaration

external-declaration: /* Tillåts endast vid externt omfång (fil) */
function-definition
declaration

function-definition:
declaration-specifiers väljaattribute-seqväljadeclaratordeclaration-listväljacompound-statement

/* attribute-seq är Microsoft-specifik */

Prototypparametrar är:

declaration-specifiers:
storage-class-specifier declaration-specifiers välja
type-specifier declaration-specifiers välja
type-qualifier declaration-specifiers välja

declaration-list:
declaration
declaration-list declaration

declarator:
pointer väljadirect-declarator

direct-declarator: /* En funktionsdeklarator */
direct-declarator ( parameter-type-list ) /* Deklarator i ny stil */
direct-declarator ( identifier-list välja) /* Deklarator i föråldrad stil */

Parameterlistan i en definition använder den här syntaxen:

parameter-type-list: /* Parameterlistan */
parameter-list
parameter-list , ...

parameter-list:
parameter-declaration
parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator
declaration-specifiers abstract-declarator välja

Parameterlistan i en funktionsdefinition i gammal stil använder den här syntaxen:

identifier-list: /* Används i föråldrade funktionsdefinitioner och deklarationer */
identifier
identifier-list , identifier

Syntaxen för funktionstexten är:

compound-statement:
{ declaration-list väljastatement-listvälja}

De enda storage-class-specificerare som kan ändra en funktionsdeklaration är extern och static. Specificeraren extern betyder att funktionen kan refereras från andra filer, dvs. funktionsnamnet exporteras till länkaren. Specificeraren static betyder att funktionen inte kan refereras från andra filer, dvs. namnet exporteras inte av länkaren. Om ingen lagringsklass visas i en funktionsdefinition extern antas det. I vilket fall som helst är funktionen alltid synlig från definitionspunkten till slutet av filen.

Den valfria declaration-specifiers och obligatoriska declarator tillsammans anger funktionens returtyp och namn. declarator är en kombination av identifieraren som namnger funktionen och parenteserna efter funktionsnamnet. Den valfria attribute-seq icke-terminalen är en Microsoft-specifik funktion som definierats i Funktionsattribut.

direct-declarator (i syntaxendeclarator) anger namnet på den funktion som definieras och identifierarna för dess parametrar. direct-declarator Om innehåller en parameter-type-listanger listan typerna av alla parametrar. En sådan deklarator fungerar också som en funktionsprototyp för senare anrop till funktionen.

A declaration i declaration-list funktionsdefinitionerna i får inte innehålla något storage-class-specifier annat än register. I type-specifier syntaxen declaration-specifiers kan endast utelämnas om lagringsklassen register har angetts för ett värde av int typen.

compound-statement är funktionstexten som innehåller lokala variabeldeklarationer, referenser till externt deklarerade objekt och -instruktioner.

I avsnitten Funktionsattribut, Lagringsklass, Returtyp, Parametrar och Funktionstext beskrivs komponenterna i funktionsdefinitionen i detalj.

Se även

Funktioner