簡體   English   中英

在一個聲明語句中定義函數和變量

[英]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;
}

有效的,因為當你在聲明變量和函數,編譯器不知道。 並且當您開始執行該函數時(它認為您想聲明從intreturn 1作為變量后的第一個分號的所有內容)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM