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

Defining a function and a variable in one declaration statement

我很确定以下是合法的

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

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

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

int a, f()
{
   return 1;
}

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

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

我正在尝试进行 codegolf 风格的挑战,我需要在字符方面最小化我的代码,我想知道这个技巧是否是合法的 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之后的第一个分号的所有内容声明为变量)。