gpt4 book ai didi

c - 参数列表中的前导逗号表示空括号?

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:56 24 4
gpt4 key购买 nike

在VS2010中,以下代码在.c文件中编译运行:

void F1(,a,b,c,d,e){}  // Note the leading comma.

void F2(void){
int x = 10;
void* y = 0;
F1(x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, y); // Compiles fine.
}

所以它实际上就像在某处看到过这样:

void F1();

以下代码无法通过每个参数的 printf 行上的未知标识符错误进行编译:

void F1(,a,b,c,d,e){
printf("%d, %d, %d, %d, %d\n", a, b, c, d, e);
}

这是 C 标准的一部分吗?知道发生了什么事吗?

最佳答案

这是非法的 C99:参数列表必须指定参数的类型;在 C90 中,它们默认为 int

而且,我认为,它在 C99 中也是非法的,因为 the Standard 中的文本(6.9.1) 参数类型列表和标识符列表使用“应”形式。 出于同样的原因,我假设这同样适用于 C90,使该语言的代码也非法,但我现在无法检查。

6.9.1/5 If the declarator includes a parameter type list, the declaration of each parameter shall include an identifier, except for the special case of a parameter list consisting of a single parameter of type void, in which case there shall not be an identifier. No declaration list shall follow.

6.9.1/6 If the declarator includes an identifier list, each declaration in the declaration list shall have at least one declarator, those declarators shall declare only identifiers from the identifier list, and every identifier in the identifier list shall be declared. An identifier declared as a typedef name shall not be redeclared as a parameter. The declarations in the declaration list shall contain no storage-class specifier other than register and no initializations.

关于c - 参数列表中的前导逗号表示空括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com