gpt4 book ai didi

c - 将 main 定义为 int main(...){} 是否有任何问题

转载 作者:太空狗 更新时间:2023-10-29 15:28:38 25 4
gpt4 key购买 nike

我一直在思考用 C 语言最简单地表达主要功能的最诚实的方式(是的,它很琐碎而且通常不有趣,但对我来说很有趣)。

很长一段时间,直到今天,我更喜欢定义 main 如下:

int main(int argc, char **argv)
{
return 0;
}

我的问题是我通常从不使用这些参数,所以它使参数明确,即使我在代码中不太关心它们以将它们写出来。

所以我开始做

int main() 
{
return 0;
}

这是诚实的,因为它没有像许多人在 int main(void){} 定义中那样明确表示该函数没有参数,我对此很满意。

p>

然而,我只是有一个想法,使用 main 的可变参数定义让 main 的定义对我来说更舒服,因为它“看起来”对我来说好像函数确实有参数,但我现在不关心它们.

int main(...)
{
return 0;
}

这种对……的符号滥用有什么问题吗?也就是说,... 旨在用于模式的功能(,可以从中推断出后续参数数量的参数,...)。而这个 main 不符合这种模式,从技术上讲是对符号的误用。

我理解这种表示法会误导其他读者(...有点高级概念,被滥用会使它更具误导性),并且在共享代码时我仍然会更喜欢其他原型(prototype)。我只是好奇这样做是否有效 C。

我的问题是:

  1. 是 main 可移植的可变参数定义,还是某些编译器可能不喜欢它。

  2. 通常可以进行这种定义吗,或者这样做会产生运行时/编译时后果吗?

最佳答案

不,那是绝对错误的。

这是错误的,因为它是无效的语法。来自 n1548 第 6.7.6 节:

parameter-type-list:
parameter-list
parameter-list , ...
parameter-list:
parameter-declaration
parameter-list , parameter-declaration

根据 C 标准,如果您在函数参数中使用 ...,您必须在它之前至少有一个其他参数。别的都是无效的 C。从语法可以看出,...只能出现在逗号,parameter-list之后, parameter-list 不能为空。

您的编译器可能会接受它,但这并不意味着什么。编译器接受许多无效的 C 内容,并且无论如何都会愉快地编译它们。

关于c - 将 main 定义为 int main(...){} 是否有任何问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36522931/

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