精华内容
下载资源
问答
  • 从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么一种才是正确的呢?我们先来看看目前有哪些版本。 main函数版本 第一种,没有返回值,没有入参: main() 在C89标准中,这种写法是可以接受...

     

    前言

    main函数是程序启动后执行的第一个函数。从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么哪一种才是正确的呢?我们先来看看目前有哪些版本。

    main函数版本

    第一种,没有返回值,没有入参:

    main()
    

    在C89标准中,这种写法是可以接受的,但使用现在的编译器编译时,会报告警,并且会将其返回值默认为int。实际上,如果函数没有显式声明返回类型,那么编译器会将返回值默认为int。

    第二种,返回值为void,没有入参:

    void main()
    

    这种形式的来源不得而知。但是为何这么多初学者使用?main函数的返回值最终会作为程序的退出状态,而一旦声明为void,在程序退出后,想要获取其退出状态也就不可以了。因此不建议其返回值为void。

    第三种,返回值为int,参数为void:

    int main(void)
    

    这是常见的一种写法。形参为void,表明它在调用的时候不能传入任何参数,那么它也就不能获取命令行参数了。

    第四种,返回值为int,没有参数:

    int main()
    

    看起来似乎和第三种没有什么区别,但这种形式却有些许不同。虽然它的声明没有入参,实际调用却可以传入参数,看下面的例子:

    #include<stdio.h>
    void  test();
    int main() 
    { 
        test(4);
        return 0; 
    }
    void test(int a)
    {
        printf("%d",a);
    }
    

    对于上面的程序,我们仍然可以编译并正常运行,test函数虽然声明为无入参,但调用时却是可以传入任何参数或不传参数的。

    第五种,返回值为int,有两个入参:

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

    这也是最常见的一种写法。第一个入参为命令行参数个数,第二个入参为命令行参数数组。通常用于实现需要从命令行获取参数的功能。

    第六种,返回值为int,有三个入参:

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

    这种和第五种相似,但多了一个参数,用于获取环境变量,这种形式多源于编译器的扩展。但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenv或putenv,因此也没有必要使用该形式。

    没想到吧,仔细数一数竟然有这么种写法?但是真相究竟如何?到底使用哪种呢?

    真相大白

    C89/C99/C11标准文档中只提供了两种main函数的写法

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

    也就是说,其他的写法都是不符合标准的,有的是历史遗留问题,有的是编译器扩展,更有的不知从何而来。当然对于带参数的写法,其参数名可自定义。另外对于除标准提供的以外的写法,不同的编译器有不同的处理策略,有的可能编译不过,有的可能报警告,但一个“正经”的编译器是不会对标准提供的形式产生质疑的。

    总结

    至此,我们已经知道了c语言main函数的写法,我们来总结一下前面的内容:

    • C标准只提供了两种main的形式,即前面提到的第三种和第五种。

    • 为了代码的通用可移植性,建议采用标准提供的形式。

    • 不需要命令行参数可采用第三种,需要命令行参数采用第五种。

    • 如果一个函数确定无需传入任何参数,那么用void限定是一个不错的选择。

    • 函数没有声明返回值时,编译器默认其返回值为int。

      

    |  读书 | 成长 | 技术  |

    长按二维码关注公众号

    推荐阅读:

    hello程序是如何被编译出来的?

    一个奇怪的链接问题

    变长参数探究

    展开全文
  • C语言的main函数写法

    2020-01-28 16:32:51
    从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么一种才是正确的呢?我们先来看看目前有哪些版本。 main函数版本 第一种,没有返回值,没有入参: main() 在C89标准中,这种写法是可以接受...

    前言

    main函数是程序启动后执行的第一个自定义函数。从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么哪一种才是正确的呢?我们先来看看目前有哪些版本。

    main函数版本

    第一种,没有返回值,没有入参:

    main()
    

    在C89标准中,这种写法是可以接受的,但使用现在的编译器编译时,会报告警,并且会将其返回值默认为int。实际上,如果函数没有显式声明返回类型,那么编译器会将返回值默认为int。

    第二种,返回值为void,没有入参:

    void main()
    

    这种形式的来源不得而知。但是为何这么多初学者使用?main函数的返回值最终会作为程序的退出状态,而一旦声明为void,在程序退出后,想要获取其退出状态也就不可以了。因此不建议其返回值为void。

    第三种,返回值为int,参数为void:

    int main(void)
    

    这是常见的一种写法。形参为void,表明它在调用的时候不能传入任何参数,那么它也就不能获取命令行参数了。

    第四种,返回值为int,没有参数:

    int main()
    

    看起来似乎和第三种没有什么区别,但这种形式却有些许不同。虽然它的声明没有入参,实际调用却可以传入参数,看下面的例子:

    #include<stdio.h>
    void  test();
    int main() 
    { 
        test(4);
        return 0; 
    }
    void test(int a)
    {
        printf("%d",a);
    }
    

    对于上面的程序,我们仍然可以编译并正常运行,test函数虽然声明为无入参,但调用时却是可以传入任何参数或不传参数的。

    第五种,返回值为int,有两个入参:

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

    这也是最常见的一种写法。第一个入参为命令行参数个数,第二个入参为命令行参数数组。通常用于实现需要从命令行获取参数的功能。

    第六种,返回值为int,有三个入参:

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

    这种和第五种相似,但多了一个参数,用于获取环境变量,这种形式多源于编译器的扩展。但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenv或putenv,因此也没有必要使用该形式。

    没想到吧,仔细数一数竟然有这么种写法?但是真相究竟如何?到底使用哪种呢?

    真相大白

    C89/C99/C11标准文档中只提供了两种main函数的写法

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

    也就是说,其他的写法都是不符合标准的,有的是历史遗留问题,有的是编译器扩展,更有的不知从何而来。当然对于带参数的写法,其参数名可自定义。另外对于除标准提供的以外的写法,不同的编译器有不同的处理策略,有的可能编译不过,有的可能报警告,但一个“正经”的编译器是不会对标准提供的形式产生质疑的。

    总结

    至此,我们已经知道了c语言main函数的写法,我们来总结一下前面的内容:

    • C标准只提供了两种main的形式,即前面提到的第三种和第五种。

    • 为了代码的通用可移植性,建议采用标准提供的形式。

    • 不需要命令行参数可采用第三种,需要命令行参数采用第五种。

    • 如果一个函数确定无需传入任何参数,那么用void限定是一个不错的选择。

    • 函数没有声明返回值时,编译器默认其返回值为int。

    展开全文
  • C语言编程要点

    2017-09-18 00:10:37
    8.5. 如果一个函数没有返回值,是否需要加入return语句? 132 8.6. 怎样把数组作为参数传递给函数? 133 8.7. 在程序退出main()函数之后,还有可能执行一部分代码吗? 135 8.8. 用PASCAL修饰符说明的函数与普通C函数有...
  • 从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么一种才是正确的呢?我们先来看看目前有哪些版本。 main函数版本 第一种,没有返回值,没有入参: main() 在C89标准中,这种写法是可以接受的,...

    前言

    从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么哪一种才是正确的呢?我们先来看看目前有哪些版本。

    main函数版本

    第一种,没有返回值,没有入参:

    main()
    

    在C89标准中,这种写法是可以接受的,但使用现在的编译器编译时,会报告警,并且会将其返回值默认为int。实际上,如果函数没有显式声明返回类型,那么编译器会将返回值默认为int。

    第二种,返回值为void,没有入参:

    void main()
    

    这种形式的来源不得而知。但是为何这么多初学者使用?main函数的返回值最终会作为程序的退出状态,而一旦声明为void,在程序退出后,想要获取其退出状态也就不可以了。因此不建议其返回值为void。

    第三种,返回值为int,参数为void:

    int main(void)
    

    这是常见的一种写法。形参为void,表明它在调用的时候不能传入任何参数,那么它也就不能获取命令行参数了。

    第四种,返回值为int,没有参数:

    int main()
    

    看起来似乎和第三种没有什么区别,但这种形式却有些许不同。虽然它的声明没有入参,实际调用却可以传入参数,看下面的例子:

    #include<stdio.h>
    void  test();
    int main() { 
        test(4);
        return 0; 
    }
    void test(int a){
        printf("%d",a);
    }
    

    对于上面的程序,我们仍然可以编译并正常运行,test函数虽然声明为无入参,但调用时却是可以传入任何参数或不传参数的。

    第五种,返回值为int,有两个入参:

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

    这也是最常见的一种写法。第一个入参为命令行参数个数,第二个入参为命令行参数数组。通常用于实现需要从命令行获取参数的功能。

    第六种,返回值为int,有三个入参:

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

    这种和第五种相似,但多了一个参数,用于获取环境变量,这种形式多源于编译器的扩展。但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenv或putenv,因此也没有必要使用该形式。

    没想到吧,仔细数一数竟然有这么种写法?但是真相究竟如何?到底使用哪种呢?

    真相大白

    C89/C99/C11标准文档中只提供了两种main函数的写法:

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

    也就是说,其他的写法都是不符合标准的,有的是历史遗留问题,有的是编译器扩展,更有的不知从何而来。当然对于带参数的写法,其参数名可自定义。另外对于除标准提供的以外的写法,不同的编译器有不同的处理策略,有的可能编译不过,有的可能报警告,但一个“正经”的编译器是不会对标准提供的形式产生质疑的。

    总结

    至此,我们已经知道了c语言main函数的写法,我们来总结一下前面的内容:

    • C标准只提供了两种main的形式,即前面提到的第三种和第五种。

    • 为了代码的通用可移植性,建议采用标准提供的形式。

    • 不需要命令行参数可采用第三种,需要命令行参数采用第五种。

    • 如果一个函数确定无需传入任何参数,那么用void限定是一个不错的选择。

    • 函数没有声明返回值时,编译器默认其返回值为int。

    关注我:带你遨游代码的世界~
    获取更多:私信 “资料” 获取

    也可以加我们的交流群:1073932648

    展开全文
  • 从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么一种才是正确的呢?我们先来看看目前有哪些版本。 main函数版本 第一种,没有返回值,没有入参: main() 在C89标准中,这种写法是可以接受的,但...

    前言

    main函数是程序启动后执行的第一个自定义函数。从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么哪一种才是正确的呢?我们先来看看目前有哪些版本。

    main函数版本

    第一种,没有返回值,没有入参:

    main()

    在C89标准中,这种写法是可以接受的,但使用现在的编译器编译时,会报告警,并且会将其返回值默认为int。实际上,如果函数没有显式声明返回类型,那么编译器会将返回值默认为int。

    第二种,返回值为void,没有入参:

    void main()

    这种形式的来源不得而知。但是为何这么多初学者使用?main函数的返回值最终会作为程序的退出状态,而一旦声明为void,在程序退出后,想要获取其退出状态也就不可以了。因此不建议其返回值为void。

    第三种,返回值为int,参数为void:

    int main(void)

    这是常见的一种写法。形参为void,表明它在调用的时候不能传入任何参数,那么它也就不能获取命令行参数了。

    第四种,返回值为int,没有参数:

    int main()

    看起来似乎和第三种没有什么区别,但这种形式却有些许不同。虽然它的声明没有入参,实际调用却可以传入参数,看下面的例子:

    #include<stdio.h>
    
    void test();
    
    int main()
    
    {
    
    test(4);
    
    return 0;
    
    }
    
    void test(int a)
    
    {
    
    printf("%d",a);
    
    }
    

    对于上面的程序,我们仍然可以编译并正常运行,test函数虽然声明为无入参,但调用时却是可以传入任何参数或不传参数的。

    第五种,返回值为int,有两个入参:

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

    这也是最常见的一种写法。第一个入参为命令行参数个数,第二个入参为命令行参数数组。通常用于实现需要从命令行获取参数的功能。

    第六种,返回值为int,有三个入参:

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

    这种和第五种相似,但多了一个参数,用于获取环境变量,这种形式多源于编译器的扩展。但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenv或putenv,因此也没有必要使用该形式。

    没想到吧,仔细数一数竟然有这么种写法?但是真相究竟如何?到底使用哪种呢?

    真相大白

    C89/C99/C11标准文档中只提供了两种main函数的写法:

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

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

    也就是说,其他的写法都是不符合标准的,有的是历史遗留问题,有的是编译器扩展,更有的不知从何而来。当然对于带参数的写法,其参数名可自定义。另外对于除标准提供的以外的写法,不同的编译器有不同的处理策略,有的可能编译不过,有的可能报警告,但一个“正经”的编译器是不会对标准提供的形式产生质疑的。

    总结

    至此,我们已经知道了c语言main函数的写法,我们来总结一下前面的内容:

    C标准只提供了两种main的形式,即前面提到的第三种和第五种。

    为了代码的通用可移植性,建议采用标准提供的形式。

    不需要命令行参数可采用第三种,需要命令行参数采用第五种。

    如果一个函数确定无需传入任何参数,那么用void限定是一个不错的选择。

    函数没有声明返回值时,编译器默认其返回值为int。

    展开全文
  • 从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么一种才是正确的呢?我们先来看看目前有哪些版本。 main函数版本 第一种、没有返回值,没有入参: main() 在C89标准中,这种写法是可以接受的,但...
  • 慢慢总结C语言一些常用函数

    千次阅读 2015-10-25 09:54:35
    返回值:成功时s指向哪返回的指针就指向,出错或者读文件末尾时返回NULL。 说明:fgets从指定的文件中读一行字符调用者提供的缓冲区中。 gets 头文件:#include 函数原型:char *gets(char *s);
  • 因此,C程序的执行总是从main函数开始, 完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C源程序必须有,也只能有一个主函数main。   函数定义的一般形式 1.无参函数的一般形式 ...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    可我找不任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 数组大小 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数...
  • o 6.13 考虑有关空指针的所有这些困惑, 难道把要求它们内部表达都必须为 0 不是更简单吗? o 6.14 说真的, 真有机器用非零空指针吗, 或者不同类型用不同的表达? o 6.15 运行时的 ``空指针赋值" 错误是什么意思...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    可我找不任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 12  数组大小 13 1.23 能否声明和传入数组大小一致的局部数组,或者由...
  • 可我找不任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。  数组大小  1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数...
  • 可我找不任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 12  数组大小 13 1.23 能否声明和传入数组大小一致的局部数组,或者由...
  • 可我找不任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 数组大小 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    难道在C语言中一个结构不能包含指向自己的指针吗? . . . . 3 1.7 怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返 回指向字符的指针的函数的指针的数组? . . . . . . . . . . . . . . 3 1.8 函数只定义...
  • 可我找不任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以无穷。 41 数组大小 42 1.23 能否声明和传入数组大小一致的局部数组,或者由其他...
  • 可我找不任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以无穷。 41 数组大小 42 1.23 能否声明和传入数组大小一致的局部数组,或者由其他...
  • GDB 单步调试汇编

    2020-12-02 12:26:11
    否则函数结束时%rsp不知道该回退到哪。 <p>retq指令相当于: <pre><code> pop %rip </code></pre> 将上面保存过的callq的下一条指令地址恢复到%rip中。 接收函数返回值 <pre><code> 0x00000000004004ae <...
  • 8.5 如果一个函数没有返回值,是否需要加入return语句? 8.6 怎样把数组作为参数传递给函数? 8.7 在程序退出main()函数之后,还有可能执行一部分代码吗? 8.8 用PASCAL修饰符说明的函数与普通C函数有什么...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题36 在工作中学习了些什么 35 第2篇 C/C++基础知识 第4章 C/C++语言基础(教学视频:50分钟) 38 4.1 基本数据类型 38 面试题37 C++中有几种基本数据类型 38 面试题38 整型有几种形式?各种形式有什么...
  • windows 程序设计

    2011-07-24 21:16:30
    主要的区别在于C语言链接库函数的机械码连结您的程序代码中,而Windows函数的程序代码在您程序执行文件外的DLL中。 当您执行Windows程序时,它通过一个称作「动态链接」的过程与Windows相接。一个Windows的.EXE...
  • 5.5.3 使用一个cin.get( ) 5.5.4 文件尾条件 5.5.5 另一个cin.get( )版本 5.6 嵌套循环和二维数组 5.6.1 初始化二维数组 5.6.2 使用二维数组 5.7 总结 5.8 复习题 5.9 编程练习 第6章 分支语句和逻辑...
  • 新手学习C++入门资料

    2008-12-28 23:58:50
    主体:(一)与C语言的区别> ...而且C++允许重复定义变量,C语言也是做不这一点的。看下面的程序: #include iostream.h int a; int main() { cin>>a; for(int i=1;i;i++) //C语言中,不允许在这里定义变量...
  • (2)strcat能把strSrc 的内容连接strDest,为什么还要char * 类型的返回值? 答:方便赋值给其他变量 6.MFC中CString是类型安全类么? 答:不是,其它数据类型转换CString可以使用CString的成员函数Format来...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

c语言返回值返回到哪

c语言 订阅