函式宣告語法
函式可能全域或成員的類別或結構。 這些就是使用下列程序的宣告:
[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]
宣告規範。 請參閱規範。
在類別內,選擇性friend規範。
選擇性儲存類別規範。 對於全域函式,允許儲存類別規範是靜態和extern。 類別成員函式,如 extern 不允許。
選擇性的函式規範。 對於全域函式,則僅有允許的函式規範是內嵌。 類別成員函式,如虛擬和內嵌是允許以及專為建構函式, 明確。
型別規範來表示的傳回型別 (受制於指標或參考的型別,用來修改 * 或 &)。
宣告子。
選擇性的指標或參考已操作員修改傳回的型別
選擇性 Microsoft 修飾特定詞指定的呼叫慣例。 請參閱 Microsoft 特定修飾詞。
函式的名稱。 如果函式是類別或結構的成員,就可能使用範圍解析運算子來限定名稱。
以括弧括住的引數宣告清單**()**。
選擇性 const 或 volatile 限定詞。 在此情況下, const 只可用於類別成員,而且用來表示函式不會修改類別的資料成員。
如果函式指標的傳回型別,宣告的語法可能比較複雜,如以下所述。
- 一種選擇性的例外狀況規格,表示何種例外狀況的函式會擲回。 請參閱例外狀況規格。
宣告的識別項的型別可能會建構方式如下: const 或 (若有指定) 的靜態函式,將指定的引數清單中,傳回宣告規範指示的型別。
下列範例顯示兩個簡單的函式宣告:
char *strchr( char *dest, char *src );
static int atoi( const char *ascnum ) const;
宣告函式返回函式的指標
建議的typedef能用來宣告函式指標型別的別名,如果宣告的函式,傳回的函式指標型別。 例如
typedef int (*fp)(int);
fp myFunction(char* s); // function returning function pointer
如果不這麼做,函式宣告的適當語法可能會從推算出來的函式指標的宣告語法來取代識別項 (fp在上述的範例) 與函式名稱和引數清單,如下所示:
int (*myFunction(char* s))(int);
上述的宣告,相當於使用 typedef 上述的宣告。