在一个声明语句中定义函数和变量

时间:2015-04-17 14:38:13

标签: c++ syntax language-lawyer

我很确定以下是合法的

int a, *b, c[5], d(char x);

这定义了一个整数a,一个指向int b的指针,一个包含5个整数c的数组,并声明一个函数d获取一个char并返回int。

在那里提供函数的定义是否合法? (假设我们不在功能范围内)

int a, f()
{
   return 1;
}

int main()
{
    cout << a << f(); //prints 01;
}

MSVC拒绝该代码。如果这样做是对的,我想知道标准中的哪个规则允许这样的函数声明而不是定义。

我正在尝试进行codegolf风格的挑战,我需要在字符方面最小化我的代码,我想知道这个技巧是否是合法的C ++。

2 个答案:

答案 0 :(得分:3)

不,函数定义只有一个声明符。它在C ++ 11 8.4.1和A.7中指定:

function-definition:
    attribute-specifier-seq<opt> decl-specifier-seq<opt> declarator virt-specifier-seq<opt> function-body

答案 1 :(得分:1)

int a, *b, c[5], d(char x);

有效,因为编译器知道您不再声明任何变量。编译器知道这一点,因为语句后面有一个分号。

int a, f()
{
return 1;
}

是否有效,因为编译器不知道您何时声明变量和函数。当你开始实现函数的时候;(它认为你想要在int作为变量之后声明从return 1到第一个分号的所有内容。)