【C++】main函数及返回值深度解析

一.main函数介绍

1.main函数怎么写

#include <iostream>

int main() {
    // 程序的代码放在这里
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

在这个例子中:

  1. #include <iostream> 是预处理指令,它告诉编译器包含标准输入输出流库。
  2. int main() 定义了 main 函数,它返回一个整数。在大多数情况下,返回值为0表示程序正常结束。
  3. std::cout 是用于输出文本到控制台的标准输出流。
  4. "Hello, World!" 是要输出的字符串。
  5. << std::endl; 是一个插入操作符,它将字符串输出到控制台,然后添加一个换行符。
  6. return 0; 表示程序成功执行并返回。

2.main函数的作用

在 C++ 中,main()函数是一个程序的起点,它是每个可执行 C++ 应用程序中的第一个被调用的函数。main()函数有两个主要作用:

  • 程序入口点:当你运行一个 C++ 程序时,操作系统会寻找名为main的函数作为程序执行的开始。它必须放在源代码文件中,并且没有返回类型(通常声明为 int main() { ... },但也可以是void main( ),不过这在某些编译器下不推荐)。
  • 控制结束流程:main() 函数通常包含程序的基本执行逻辑。这里的 int返回值用来指示程序的执行结果。如果执行成功,通常返回 0;如果遇到错误,可能返回非零数值。例如:

3.main函数不是程序最先执行的

        实际上,所有外部对象的构造函数都是先于main()函数执行的。如果要对类中的成员对象进行初始化,那么这些对象的构造函数也是在main()函数之前执行的。如果在这些构造函数中还调用了其他函数的话,就可以有更多的函数先于main()函数之前运行。因此main()函数不一定是C++程序中第一个被执行的函数。

为什么程序一定要从main函数开始执行?icon-default.png?t=N7T8https://www.zhihu.com/question/28360770

二.main函数参数介绍

1.main函数无参列表

int main() {
    // 函数体
}

2.main函数有参列表

int main(int argc, char* argv[]) {
    // argc是参数计数,argv是一个字符串数组,存储了所有参数
    // ...
}

三.main函数返回值介绍

下面介绍下返回值的类型、返回值的方式及返回值内容。

1.mian函数返回值的类型

  • 关于void main( )

        在C/C++ 中有些时候我们会看到void main( ) 这样的用法,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.( void main( ) 从来就不存在于 C++ 或者 C )。

        虽然在一些编译器中,void main 可以通过编译(如 vc6),但并非所有编译器都支持 void main ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用 int main 。

新的C99标准中,只有以下两种定义方式是正确的:

int main(void)

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

(参考资料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup)

当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成 char **argv;argv 和 argc 可以改成别的变量名(如 intval 和 charval),不过一定要符合变量的命名规则。

main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统,启动代码)。

2.mian函数返回值的方式

        C++标准中返回值并不要求显式的书写,所以如果你没有写return语句编译器甚至不会给出警告。但是如果没有显式的书写,编译器会自动加上return 0,也就是返回“程序正确执行完成”,不过建议手动加上return 语句,很多时候执行高程序调用需要获取返回值。

  • 显示return

        int main接收一个int型返回值,通常main函数正常退出需要在main函数结尾写return 0;

  • 隐式return

        C++中,如果main函数中结尾没有写return语句,那么就认为默认return 0;

参考资料

本文参考其他一些博主的总结和书籍上的资料,相关链接:

https://blog.csdn.net/qq_38038085/article/details/77873712

https://blog.csdn.net/lzm18064126848/article/details/51039607

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/765221.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

入门Axure:快速掌握原型设计技能

2002 年&#xff0c;维克托和马丁在旧金山湾区的一家初创公司工作&#xff0c;发现自己一再被软件开发生命周期的限制所困扰&#xff0c;而且产品团队在编写规范之前很难评估他们的解决方案&#xff0c;开发人员经常不理解&#xff08;或不阅读&#xff09;给出的规范&#xff…

02.C1W1.Sentiment Analysis with Logistic Regression

目录 Supervised ML and Sentiment AnalysisSupervised ML (training)Sentiment analysis Vocabulary and Feature ExtractionVocabularyFeature extractionSparse representations and some of their issues Negative and Positive FrequenciesFeature extraction with freque…

前端人注意了!Nuxt 的服务器专用组件应该引起你的关注!!

大家好&#xff0c;我是CodeQi&#xff01; 前几天&#xff0c;我和同事们在讨论 Nuxt.js 的一些新特性时&#xff0c;突然发现一件有趣的事情&#xff1a;Nuxt 的服务器专用组件&#xff08;Server-only Components&#xff09;引起了大家的极大兴趣。 为了不显得太落伍&am…

【unity实战】使用旧输入系统Input Manager 写一个 2D 平台游戏玩家控制器——包括移动、跳跃、滑墙、蹬墙跳

最终效果 文章目录 最终效果素材下载人物环境 简单绘制环境角色移动跳跃视差和摄像机跟随效果奔跑动画切换跳跃动画&#xff0c;跳跃次数限制角色添加2d物理材质&#xff0c;防止角色粘在墙上如果角色移动时背景出现黑线条方法一方法二 墙壁滑行实现角色滑墙不可以通过移动离开…

MySQL——事务ACID原则、脏读、不可重复读、幻读

什么是事务 要么都成功&#xff0c;要么都失败 一一一一一一一 1. SQL执行&#xff1a;A给B转账 A 1000 ---->200 B 200 2. SQL执行&#xff1a;B收到A的钱 A 800 B 400 一一一一一一一 将一组SQL放在一个批次中去执行~ 事务原则&#xff1a;ACI…

SolidWorks教育版:丰富的教学资源

在当今日新月异的工程教育领域中&#xff0c;一款强大的教学工具对于提高学生的学习效果和创新能力至关重要。SolidWorks教育版凭借其丰富的教学资源&#xff0c;不仅满足了教师的教学需求&#xff0c;也为学生提供了一个全方面、深入的学习平台。本文将深入探讨SolidWorks教育…

[DataWhale大模型应用开发]学习笔记1-尝试搭建向量数据库

1.词向量 1.定义 词向量&#xff08;Word Vector&#xff09;是将单词表示为向量形式的技术&#xff0c;是自然语言处理&#xff08;NLP&#xff09;中的一种常用方法。通过将单词转化为向量&#xff0c;计算机能够更好地理解和处理语言。简单来说&#xff0c;词向量就是将单…

Cocos制作抖音小游戏接入侧边栏复访接口实例

本篇文章主要讲解&#xff0c;使用cocos接入抖音小游戏侧边栏接口的实例教程。 日期&#xff1a;2024年7月1日 作者&#xff1a;任聪聪 教程实例&#xff1a;https://download.csdn.net/download/hj960511/89509196 下载后可直接导入运行 上传游戏后抖音预审不通过 注意&#x…

win10下安装PLSQL14连接Oracle数据库

问题背景 在使用Oracle开发过程中&#xff0c;经常会使用工具来连接数据库&#xff0c;方便查询、处理数据。其中有很多工具可以使用&#xff0c;比如dbeaver、plsql等。本文主要介绍在win10环境下&#xff0c;plsql14的安装步骤以及安装过程中遇到的一些问题。 安装步骤及问题…

TensorRT学习(二)TensorRT使用教程(Python版)

本文适合快速了解TensorRT使用的整体流程,具体细节还是建议参考TensorRT的官方文档。 加速原理: 加速原理比较复杂,它将会根据显卡来优化算子,以起到加速作用(如下图所示)。简单的来说,就是类似于你出一个公式1+1+1,而你的显卡支持乘法,直接给你把这个公式优化成了1*…

scikit-learn教程

scikit-learn&#xff08;通常简称为sklearn&#xff09;是Python中最受欢迎的机器学习库之一&#xff0c;它提供了各种监督和非监督学习算法的实现。下面是一个基本的教程&#xff0c;涵盖如何使用sklearn进行数据预处理、模型训练和评估。 1. 安装和导入包 首先确保安装了…

controller不同的后端路径对应vue前端传递数据发送请求的方式,vue请求参数 param 与data 如何对应后端参数

目录 案例一&#xff1a; 为什么使用post发送请求&#xff0c;参数依旧会被拼接带url上呢&#xff1f;这应该就是param 与data传参的区别。即param传参数参数会被拼接到url后&#xff0c;data会以请求体传递 补充&#xff1a;后端controller 参数上如果没写任何注解&#xff0c…

【附精彩文章合辑】为何选择TypeScript?转变的驱动力:Rust的魅力何在?

在探讨一个开发者团队耗时18个月从TypeScript转向Rust&#xff0c;并随后对TypeScript进行严厉批评的情境时&#xff0c;我们首先需要认识到&#xff0c;任何技术栈的选择与转换都是基于一系列复杂的考量&#xff0c;包括但不限于项目需求、性能瓶颈、团队技能、长期可维护性以…

VGPU的使用

&#xff08;作者&#xff1a;陈玓玏&#xff09; 开源项目&#xff0c;欢迎star哦&#xff0c;https://github.com/data-infra/cube-studio 训练AI模型以及部署模型推理服务时&#xff0c;GPU往往是必不可少的&#xff0c;但当我们机器上没有足够的GPU卡可使用时&#xf…

探索未来远程调试新纪元——《串口网口远程调试软件》:无缝连接,高效调试

文章目录 前言一、无缝连接&#xff0c;突破距离限制二、高效调试&#xff0c;提升工作效率三、安全可靠&#xff0c;保护数据安全四、用户友好&#xff0c;简化操作流程五、软件地址六、远程调试软件 七、基本操作1、订阅主题2、连接3、串口调试4、网口调试 八、软件地址结束语…

【问题记录】如何在xftp上查看隐藏文件。

显示隐藏的文件夹 用xftp连接到服务器后&#xff0c;发现有些隐藏的文件夹并未显示出来&#xff0c;通过以下配置&#xff0c;即可使隐藏的文件夹给显示出来。 1.点击菜单栏的"小齿轮"按钮&#xff1a; 2.勾选显示隐藏的文件夹&#xff1a; 3.点击确定即可。

MES系统如何帮助企业提高生产效率

万界星空科技推出的制造执行MES系统&#xff0c;通过一系列先进的技术手段和管理理念&#xff0c;显著提高了制造业工厂的生产效率。以下是MES系统帮助提高生产效率的详细分析&#xff1a; 一、实时监控与快速响应 实时监控生产状态&#xff1a;MES系统能够实时采集生产线上的…

java 代码块

Java中的代码块主要有三种类型&#xff1a;普通代码块、静态代码块、构造代码块。它们的用途和执行时机各不相同。 普通代码块&#xff1a;在方法内部定义&#xff0c;使用一对大括号{}包围的代码片段。它的作用域限定在大括号内&#xff0c;每当程序执行到该代码块时就会执行其…

SpringMVC的基本使用

SpringMVC简介 SpringMVC是Spring提供的一套建立在Servlet基础上&#xff0c;基于MVC模式的web解决方案 SpringMVC核心组件 DispatcherServlet&#xff1a;前置控制器&#xff0c;来自客户端的所有请求都经由DispatcherServlet进行处理和分发Handler&#xff1a;处理器&…

linux中如何启动python虚拟环境

找到python虚拟环境所在目录 执行下面的命令即可 source auth_python/bin/activate