浅谈c/c++中main(),int main(),void main(),int main(void)四者之间的区别-程序员宅基地

技术标签: 嵌入式软件  c++  c语言  

一、主函数也是函数

  • 首先我们要了解C/C++中函数的定义,因为main函数也是函数,与其他函数的区别只是主函数是程序的主线而已,程序从它开始也在其中结束。一个函数由函数名、其前的类型标识符、其后小括号里声明的参数类型和参数名(这里的参数叫形参,即形式参数或虚拟参数)以及大括号里的函数主体构成。主函数main也不例外。

二、main前面用int还是void?

  • main前面的是类型标识符,也就是类型名,其决定的是函数返回值的类型,int指有返回值且返回值为整型,void表示“空"即没有返回值。

  • 很多时候函数是不需要返回值的,只作为语句执行就完成任务了,比如主函数main常常就是;有返回值的函数通常出现在表达式中,int i=rand();
    rand()返回一个随机值替代自身位置赋值给i,有返回值的函数定义其返回值类型可以各式各样,有int有char有float有double。

  • 对于主函数,我们常常只要程序执行它,并不需要它的返回值,所以有人用int main加上return 0,有的直接用void main.。但最后制定标准的人说了:"main’must return ‘int’,其他的乱七八糟的返回值类型都不行,void也不行,以此盖棺定论。只返回int,这大概就是main作为一个主函数的尊严,本身没什么意义就是,毕竟return0都不需要你自己加,编译器就代劳了。

  • 所以对于其他花花绿绿的函数,主函数main前只能动加int(就好比主函数只能用main表示一样,只是这么规定而已),老的编译器可能还能用void,但现在的严的编译器大多默认int,用void会报错。

  • 顺便说一句,void main()或void main(void)是写程序的人根据函数原型自行发明的,C和C+标准中可从来没有定义过void main。

  • 再偷偷告诉你,如果你受不了强权的话你可以直接用main()省略int,不过这也,只是以前的写法,早晚会在渐渐的标准化中被淘汰,当然编译器是不大会报错的就是了。

三、int main()的小括号里加不加void?

  • 有参数的要写上对应数目的参数数据类型和参数名,没有参数的就不写或写上void,大多数情况下main是不需要参数的.那么写上void如何?不如何,很好,非常正确。用int main(void)这种写法非常标准,当然用int main()也是被广泛接受的,两者都表示本主函数没有参数,以C和C++标准来看都是正确的。

四、在int main()后的主体里面能不能出现int类型的的东西?

不论返回值数据类型或者参数数据类型如何都不影响你在函数(不论主函数还是其他函数)主体内使用其他各种数据类型。*
上一个奇葩程序:

#include<iostream>
int main()
{  
    float a;
    double b;
    char c;
    float xy(short x,double y,int z);//函数定义在主函数之前时可省略此声明语句。
    std::cout<<xy(1,1,1);
}
float xy(short x,double y,int z)
{
    float a=3.1;
    char b='a';
    int c=1;
    return a;//最好返回的值对应float数据类型,否则会将对应二进制码按float规则强制转换,至于报错是不可能报错的。
}

五、总结

  • main():相当于int main()
  • int main():int是main()函数的返回类型。这表明main()函数返回的值是整数且授受任何数量的参数。
  • void main():void为空型。这表明main函数无返回值目受任何数量的参数。
  • int main(void):main不接受任何参数且返回的值是整数。
    另外请注意:
  • main()为老式的写法。返回类型int在新型的编泽器通不可以省略,否则会有警告:
  • void main()为老式的写法。6.0及之前的vC使用这祥的写法。
  • int main()和int main(void)为新的写法.
  • 在C/C++中声明主函数要么写成int main(),要么写成int main(void)。main()、void main()和void main(void)这三种写法尽量放弃。

强烈建议下面这种形式,嘎嘎规范

int main()
{ 
return 0; /* 新标准主函数的返回值这条语句可以省略 */ 
} 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44057803/article/details/127641967

智能推荐

C#实现MJPEG服务器-程序员宅基地

文章浏览阅读357次。实现流写入,将图像作为mjpeg写入 public class MjpegWriter : IDisposable { private static byte[] CRLF = new byte[] { 13, 10 }; private static byte[] EmptyLine = new byte[] { 13, 10, 13, ..._c# mpeg server

数据源初始化错误:ClassNotFoundException: com.alibaba.druid.pool.DruidDataSourceFactory的解决_caused by java.lang.classnotfoundexception: com.al-程序员宅基地

文章浏览阅读5.4k次,点赞3次,收藏3次。Exceptionsendingcontextinitializedeventtolistenerinstanceofclassorg.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanCreationException:Errorcreating..._caused by java.lang.classnotfoundexception: com.alibaba.druid.pool.druiddata

vxWorks/BootROM Imageq启动顺序详解 分类: vx...-程序员宅基地

文章浏览阅读399次。vxWorks/BootROM Imageq启动顺序详解VxWorks image 分为在ROM中运行和在RAM中运行两种,两者启动顺序的区别在于sysInit()函数的调用,该函数在RAM运行的VxWorks中初始化RAM。1.ROM中运行的VxWorks : VxWorks在ROM中运行,即写入ROM中的VxWorks是非压缩的,..._vxworks bootm 启动imga 指令

jboss规则引擎KIE Drools 6.3.0 Final 教程(1)-程序员宅基地

文章浏览阅读76次。前言眼下世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程差点儿没有,有的也仅仅有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本号的JBOSS Guvnor即5.x的一些教程,并且这些教程都是”缺胳膊少腿“的。刚開始学习的人看后不知道它究竟在干吗?能干吗?能够解决自己系统中什么问题。所以笔者自己写了几个样例,把整个最新的英文版的KIE DROOLS ..._drools-distribution-

Android MVP框架搭建与使用(含源码)-程序员宅基地

文章浏览阅读746次,点赞24次,收藏23次。其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节祝大家都能得到自己心仪工作。《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!> tag。_android mvp框架搭建

差分进化算法(Differential Evolution)-程序员宅基地

文章浏览阅读4.1w次,点赞43次,收藏239次。一、差分进化算法的由来差分进化算法(Differential Evolution,DE)于1997年由Rainer Storn和Kenneth Price在遗传算法等进化思想的基础上提出的,本质是一种多目标(连续变量)优化算法(MOEAs),用于求解多维空间中整体最优解。差分进化思想来源即是早期提出的遗传算法(GeneticAlgorithm,GA),模拟遗传学中的杂交(crossover..._差分进化算法

随便推点

【机器学习】朴素贝叶斯算法-程序员宅基地

文章浏览阅读1.4w次,点赞22次,收藏147次。朴素贝叶斯(Naive Bayes)是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法。由于朴素贝叶斯计算联合概率,所以朴素贝叶斯模型属于生成式模型。经典应用案例包括:文本分类、垃圾邮件过滤等。_朴素贝叶斯算法

APT攻击分析-程序员宅基地

文章浏览阅读638次。2019独角兽企业重金招聘Python工程师标准>>> ..._apt - ghostrat - tcp - variant 4

网站使用mysql_使用网站的mysql-程序员宅基地

文章浏览阅读92次。{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户的数据库应用系统进行性能和风险评估,参与配合进行数据压测演练,提供数据库优化方面专业建议,在业务高峰期与用户共同保障数据库系统平..._mysql对于网站

YOLOv7训练自己的数据集(超详细)-程序员宅基地

文章浏览阅读6.4w次,点赞74次,收藏808次。YOLOv7训练自己的数据集(超详细)_yolov7训练自己的数据集

gateway 内存溢出问题_java - Spring Cloud Gateway内存泄漏 - 堆栈内存溢出-程序员宅基地

文章浏览阅读2.6k次。生产中的Spring云网关发现了内存泄漏,导致系统停机。内存使用量不断增加,直到内存耗尽导致以下异常:2019-05-21 09:18:24.793 WARN The connection observed an errorio.netty.handler.codec.DecoderException: javax.net.ssl.SSLException: Tag mismatch!at io...._the connection observed an error, the request cannot be retried as the heade

Java流程控制语句-循环结构-程序员宅基地

文章浏览阅读978次,点赞15次,收藏30次。它是Java5后新增的for语句的特殊简化版本,并不能完全替代for语句,但所有foreach语句都可以改写为for语句。foreach语句在遍历数组等时为程序员提供了很大的方便。终极手撕架构师的学习笔记:分布式+微服务+开源框架+性能优化《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**