我可以用逗号声明多个函数吗?

我们可以使用,运算符一次声明多个函数吗?此代码在 gcc 上编译:

void f(), g();
void f() {}
void g() {}

int main() {
    f();
}

它是编译器的标准还是特殊性?

回答

这是标准的。看看你可以申报的所有东西:

int a, *pa, f(int), *g(int);

这是一个单一的声明,有一个类型说明符int和四个声明符。请注意,尽管具有相同的类型说明符,但那里的两个变量声明具有不同的类型。同样处理两个函数声明。类型说明符仅覆盖类型的最内层;各个声明符将其包装在诸如指针或功能性之类的东西中。

函数定义 int f() { ... }是独一无二的,不寻常的。虽然它用于声明和定义函数,并且涉及一些与声明相同的语法构造,但它在语法上与声明是分开的。由于声明是具有声明符列表的东西,因此函数定义语法不会继承该行为。所以你可以在一个声明中声明多个函数,但函数定义不是声明(尽管它声明了一个函数!)所以你一次只能做一个。

稍微编辑一下:语法的这一方面,在类型说明符和声明符之间传播类型信息,是C 和 C++的核心可怕之处之一。它可以追溯到 C 的早期,当时语言的重点意味着大多数变量都是ints,而类型实际上是声明中最可选的部分。我们大多数人都以int* a, b只创建一个指针的形式经历过这种情况,但是像声明函数指针时突然出现的括号以及复杂类型定义的整体螺旋性之类的事情也源自于从1970 年代初期。


以上是我可以用逗号声明多个函数吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>