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

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

我遇到过很多C的主要函数风格和编写的语法,但实际上我没有得到这个语法的意思,任何人都可以给出每种语法的简要说明吗? 为什么无效? 为什么是int? 为什么void,int作为参数?

void main() {

}

int main() {

}

int main(void) {

}

void main(void) {

}

int main(int) {

}

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

}

c标准指定了两种形式的一致性实现:

  • 托管实施&
  • 独立实施
  • 基于c标准定义的两种类型的环境:

  • 托管环境&
  • 独立的环境。
  • 什么是freestanding Environment和什么是Hosted Environment

    独立实现是为没有操作系统好处而执行的程序设计的。 例如:操作系统内核或嵌入式环境将是一个独立的环境。

    使用操作系统的设施的程序通常会被托管执行。

    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 iwho 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()
    

    与前面的一样,但在旧的C风格:

    int main(void)
    

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

    void main(void)
    

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

    int main(int)
    

    最完整的变体:

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

    argc是参数的个数,argv是一个参数数组,函数返回一个退出代码。

    链接地址: http://www.djcxy.com/p/72181.html

    上一篇: What these C's main function indicates?

    下一篇: Regarding 'main(int argc, char *argv[])'