Składnia deklaracji funkcji
Funkcje mogą być globalne lub członkami klasy lub struktury.Są deklarowane za pomocą następującej sekwencji:
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] declarator [cv-qualifer]
[exception-spec]
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] [*|&] [ms-modifer] identifier
( argument-list ) [cv-qualifer] [exception-spec]
Specyfikator deklaracji.Zobacz Specyfikatory.
W klasie, opcjonalny specyfikator friend.
Opcjonalna specyfikator urządzenia klasy magazynowania. W przypadku funkcji globalnych dopuszczalnymi specyfikatorami klasy magazynowej są static i extern. Dla funkcji składowej atrybut extern jest niedozwolony.
Opcjonalny specyfikator funkcji. W przypadku funkcji globalnych jedynym dopuszczalnym specyfikatorem jest inline. Dla funkcji składowej dozwolone są virtual i inline , a dla konstruktorów explicit.
Specyfikator typu, wskazujący typ zwracany (możliwa modyfikacji na typ wskaźnika lub typ referencyjny przez użycie * lub &).
Specyfikator.
Opcjonalny (-e) operator (-y) wskaźnika lub odwołań modyfikujący typ zwracany
Opcjonalne specyficzne dla firmy Microsoft modyfikatory określają konwencję wywołania. Zobacz Modyfikatory specyficzne dla firmy Microsoft
Nazwa funkcji. Jeśli funkcja jest elementem członkowskim klasy lub struktury, nazwa może być kwalifikowana za pomocą operatora rozpoznawania zakresu.
Lista deklaracji argumentów jest zawarta w nawiasach ().
Opcjonalny kwalifikator const lub volatile. W tym kontekście const może być użyty jedynie dla elementów członkowskich i jest używany do wskazania, że funkcja nie zmodyfikuje danych elementów członkowskich klasy.
Jeśli typ zwracany to wskaźnik funkcji, składnia oświadczenia może być bardziej skomplikowana, jak wyjaśniono poniżej.
- Opcjonalna specyfikacja wyjątku wskazująca jakie wyjątki wyrzuciła funkcja. Zobacz Specyfikacja wyjątku.
Typ identyfikatora tak zgłoszonego, musi być zbudowana w następujący sposób: funkcja const lub volatile (Jeśli określona), pobierająca określoną listę argumentów, zwracająca typ wskazany przez specyfikator deklaracji.
W poniższym przykładzie pokazano dwie proste deklaracje funkcji:
char *strchr( char *dest, char *src );
static int atoi( const char *ascnum ) const;
Deklaracja funkcji zwracających wskaźniki do funkcji
Zalecane jest aby typedef był wykorzystywany do deklarowania aliasu dla typu wskaźnika funkcji, jeśli deklarowana jest funkcja, która zwraca typ wskaźnika funkcji. Na przykład
typedef int (*fp)(int);
fp myFunction(char* s); // function returning function pointer
Jeśli to nie nastąpi, poprawna składna deklaracji funkcji może być wywnioskowana ze składni specyfikatora wskaźnika funkcji przez zastąpienie identyfikatora (fp w powyższym przykładzie) nazwą i listą argumentów funkcji, w następujący sposób:
int (*myFunction(char* s))(int);
Poprzednia deklaracja jest równoważna z deklaracją przy użyciu elementu typedef powyżej.