[英]Defining a function and a variable in one declaration statement
我很確定以下是合法的
int a, *b, c[5], d(char x);
它定義了一個整數a
,一個指向int b
的指針,一個由5個int c
的數組,並聲明了一個帶有字符char並返回int的函數d
。
在那里也提供功能定義是否合法? (前提是我們不在功能范圍內)
int a, f()
{
return 1;
}
int main()
{
cout << a << f(); //prints 01;
}
MSVC拒絕該代碼。 如果這樣做是正確的,我想知道標准中的哪個規則允許這樣的函數聲明,但不允許定義。
我正在嘗試進行代碼高爾夫風格的挑戰,我需要根據字符將代碼最小化,我想知道此技巧是否合法的C ++。
不,一個函數定義只有一個聲明符。 它在C ++ 11 8.4.1和A.7中指定:
function-definition:
attribute-specifier-seq<opt> decl-specifier-seq<opt> declarator virt-specifier-seq<opt> function-body
int a, *b, c[5], d(char x);
有效,因為編譯器知道您將不再聲明任何變量。 編譯器知道這一點,因為該語句后面有一個分號。
int a, f()
{
return 1;
}
是有效的,因為當你在聲明變量和函數,編譯器不知道。 並且當您開始執行該函數時(它認為您想聲明從int
到return 1
作為變量后的第一個分號的所有內容)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.