【问题标题】:Defining a function and a variable in one declaration statement在一个声明语句中定义一个函数和一个变量
【发布时间】:2015-04-17 14:38:12
【问题描述】:

我很确定以下是合法的

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

这定义了一个整数a,一个指向整数b的指针,一个5整数数组c,并声明了一个函数d接受一个字符并返回一个整数。

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

int a, f()
{
   return 1;
}

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

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

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

【问题讨论】:

  • 你可以在那里声明它但不提供函数体。

标签: c++ syntax language-lawyer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    int a, *b, c[5], d(char x);
    

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

    int a, f()
    {
    return 1;
    }
    

    有效,因为编译器不知道您何时声明变量和函数。当你开始执行函数时;(它认为你想声明从intreturn 1之后的第一个分号的所有内容作为变量)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 2021-03-04
      • 1970-01-01
      • 2016-09-26
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多