这些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是参数数组,函数返回退出代码。