我很确定以下是合法的
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 ++。
答案 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
到第一个分号的所有内容。)