这些C的​​主要function是什么?

可能重复:
为什么C和c ++中的main函数的类型留给用户定义?

我遇到过许多C的主要函数风格和写法语法,但我实际上并没有得到这个语法意味着什么,任何人都可以简要介绍每种语法? 为什么无效? 为什么int? 为什么void,int作为参数?

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

c标准规定了两种符合实现的forms:

  • 托管实施&
  • 独立实施

基于两种类型的环境,c标准定义为:

  • 托管环境&
  • 独立环境。

什么是freestanding Environment和什么是Hosted Environment

独立实现是专为在没有操作系统的情况下执行的程序而设计的实现。 对于Ex:OS内核或嵌入式环境将是一个独立的环境。

使用操作系统function的程序通常位于托管实现中。

ac程序如何在这两种环境中执行? 有什么不同?

C程序如何在这两种环境中开始执行有所不同。
对于独立环境,程序启动可以通过任何实现定义的函数来实现。 即使是main()也不存在要求

因此,问题中提到的任何函数定义都可以有效,具体取决于该独立环境的实现。 并且它们的函数参数和返回值将具有实现定义的含义,因此您需要检查其文档以了解其精确含义。

参考:

5.1.2.1独立环境

在独立环境中(可以在没有操作系统任何好处的情况下执行C程序), 程序启动时调用的函数的名称和类型是实现定义的 。 除了第4节要求的最小集合之外,任何独立程序可用的库设施都是实现定义的。

对于托管环境,标准要求程序执行从执行main()函数开始,并且还要求如何定义此函数。

其规格如下:

C99标准:5.1.2.2托管环境

5.1.2.2.1程序启动

1程序启动时调用的函数名为main。 该实现声明此函数没有原型。 它应该使用返回类型int并且没有参数来定义:

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

或者使用两个参数(这里称为argc和argv,尽管可以使用任何名称,因为它们是声明它们的函数的本地名称):

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

或同等学历; 或者以其他一些实现定义的方式。

void返回类型意味着作者意味着不向调用者返回重要值(程序的调用者)。 根据操作系统的不同,这可能是可以接受的,或者可能会导致程序启动时出现细微的困难。

void作为参数意味着程序将不使用检查命令行参数的传统方法。 有些环境提供了获取它们的替代方法; 别人不这样做。 在后一种情况下,它意味着程序忽略任何命令行参数。

main (int)允许程序检查在命令行上传递给程序的参数数量,但不检查它们的值。 这样的安排是不常见的,但是在许多实现中执行此操作的一个程序是Unix / Linux who命令列出登录用户,除了who am i只列出当前用户。 就像你是who is you一样(因为两者都有两个参数:

 [wally@lenovotower ~]$ who wally tty1 2012-01-31 22:24 (:0) wally pts/0 2012-01-31 22:24 (:0) wally pts/1 2012-01-31 22:33 (:0) wally pts/2 2012-01-31 22:34 (msi) root pts/3 2012-01-31 22:34 (msi) [wally@lenovotower ~]$ who am i wally pts/0 2012-01-31 22:24 (:0) [wally@lenovotower ~]$ who are you wally pts/0 2012-01-31 22:24 (:0) [wally@lenovotower ~]$ 

ОК,简要说明。

如果您不关心用户指定的命令行参数,并且您不想设置退出代码,则可以这样写:

 void main() 

没有参数,但想设置退出代码:

 int main() 

与previos相同,但在旧C风格:

 int main(void) 

与第一个相同,但在旧C风格:

 void main(void) 

如果您只想知道命令行参数的数量:

 int main(int) 

最完整的变种:

 int main(int argc, char* argv[]) 

argc是参数计数,argv是参数数组,函数返回退出代码。