这些C的​​主要功能是什么?

时间:2012-02-01 06:23:18

标签: c main

  

可能重复:
  Why is the type of the main function in C and c++ left to the user to define?

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

void main() {

}

int main() {

}

int main(void) {

}

void main(void) {

}

int main(int) {

}

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

}

3 个答案:

答案 0 :(得分:8)

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

  • 托管实施&
  • 独立实施

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

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

什么是freestanding Environment&什么是Hosted Environment

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

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

c程序如何在这两种环境中执行?有什么区别?

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

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

参考:

  

5.1.2.1独立环境

     

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

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

相同的规格见:

  

C99标准:5.1.2.2托管环境

     

5.1.2.2.1程序启动

     

1程序启动时调用的函数名为main。实施宣布否   这个功能的原型。它应该使用返回类型int和no来定义   参数:

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

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

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

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

答案 1 :(得分:2)

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 ~]$ 

答案 2 :(得分:-1)

ОК,简要说明。

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

void main()

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

int main()

与previos相同,但采用旧C风格:

int main(void)

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

void main(void)

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

int main(int)

最完整的变体:

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

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