繁体   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