gpt4 book ai didi

c - C中允许的主要函数形式有哪些

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:47 25 4
gpt4 key购买 nike

在阅读ANSI C时,我可以找到作者使用Main函数的各种形式如下

main(){}

void main(){}

int main(){return 0;}

main(void){}

void main(void){}

int main(void){return 0;}

这些是我观察到但无法理解的各种形式

  1. “主要”之前的术语是什么?
  2. main 后面的 () 中的那个术语叫什么??/
  3. 为什么我们必须使用它们以及在哪里使用??
  4. Void 是数据类型还是返回类型?
  5. 如果 () 括号中的 void 是要传递给函数的参数 为什么我们什么都不传递时要指定(据我所知 void 什么都不是)???
  6. 我们还有其他形式可以用 C 语言编写吗???

请不要被我的怀疑激怒,我是几天前刚开始学习的初学者..如果可能的话,请通过一些示例代码进行解释

最佳答案

省略返回类型的形式仅在 1999 标准之前的 C 版本中有效。在旧版本的 C 中,省略返回类型等同于声明显式返回类型 int。在 C99 及更高版本中,不允许省略返回类型。

将返回类型声明为void 的形式是非标准的,并且通常是教科书的标志,该标志是由不太了解该语言的人编写的。 main 的唯一标准返回类型是 int

使用空括号 () 而不是 (void) 的形式已经过时。带有空括号的版本是旧式非原型(prototype)定义。一般来说,对函数使用旧式定义仍然是合法的;特别是 main 是否允许这样做是值得商榷的。没有充分的理由使用 () 而不是 (void)

允许的形式是:

int main(void) { /* ... */ }

int main(int argc, char *argv[]) { /* ... */ }

或等价物。 “或等效”意味着您可以使用等效的 typedef 代替 intchar(但请不要),您可以拼写不同的参数名称(但请不要这样做),并且您可以使用 char **argv 而不是 char *argv[] (char **argv 是实际上是真实参数类型的更直接表示)。

标准在这两种形式之后加上短语“或以其他实现定义的方式”。实现可以但不要求支持其他形式,例如:

int main(int argc, char *argv[], char *envp[]) { /* ... */ } /* NOT PORTABLE */

甚至

void main(void) { /* ... */ } /* NOT PORTABLE */

很少需要使用这种替代形式;在 99% 的情况下,严格遵守两种标准形式中的一种就足够了,并且可以使您的代码更具可移植性。

在你的问题中,只有最后一个:

int main(void){return 0;}

绝对有效。第三个:

int main(){return 0;}

可能有效,但您不妨添加 void 关键字并消除所有疑问。

(一个不相关的旁白:int main() {/* ... */} 在 C++ 中有效,其中空括号具有不同的含义。)

(C 使用 (void) 来表示一个函数没有参数,因为 () 语法已经被用于其他目的,来表示一个函数有一个参数未指定参数的数量和类型。空括号的使用已过时,应在新代码中避免。)

关于c - C中允许的主要函数形式有哪些,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21997638/

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