C语言main函数返回值

深度剖析c语言main函数---main函数的返回值   在接下来的几篇博文中,我将对c语言的main函数进行深入的剖析,分别从函数返回值,函数参数,以及函数的执行顺序对main函数作一总结。本文主要聊聊main函数的返回值。 main函数的返回值   main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出。返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。 void main()   有一些书上的,都使... 阅读详情

      C语言几乎是所有人的第一个编程语言,而main函数则又是我们接触到的第一个函数。我们的所有程序都需要main函数,对于下面的代码,相信大家再熟悉不过了。

 

  1. #include <stdio.h>   
  2.   
  3. void main()  
  4. {  
  5.     printf("I am main function./n");  
  6. }  

 

接下来再看一段很相似的代码。

[c-sharp] view plain copy print ?
  1. #include <stdio.h>   
  2.   
  3. int main()  
  4. {  
  5.     printf("I am main function./n");  
  6.         return 0;  
  7. }  

 

       你们可能产生了疑惑,main函数返回值的作用是什么?这个问题在最初学习C语言的时候通常是不被关心的,但随着在不同的编译器和平台上编写C程序,这个问题就被我关注了。首先,我在网上查找了一些关于C语言main函数返回值的资料,供大家参考。

 

                                                             C语言之Main函数返回值问题分析


      C语言之Main函数返回值问题分析: 很多人甚至市面上的一些书籍,都使用了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.”  下面我分别说一下 C 和 C++ 标准中对 main 函数的定义。   《The C programming Language》(《C 程序设计语言》)用的就是 main( )--- 这是因为第一版的C语言只有一种类型,那就是int,没有char,没有long,没有float,……既然只有一种类型,那么就可以不写,后来的改 进版为了兼容以前的代码于是规定:不明确标明返回值的,默认返回值为int,也就是说 main()等同于int main(),而不是等同于void main()。在C99中,标准要求编译器至少给 main() 这种用法来个警告。

 

 1. C:

  在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 《The C programming Language 2e》(《C 程序设计语言第二版》)用的就是 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),不过一定要符合变量的命名规则。如果不需要从命令行中获取参数,请用int main(void) ;否则请用int main( int argc, char *argv[] ) 。 main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return 语句,虽然没有这个必要,但这是一个好的习惯。注意,vc6不会在目标文件中加入return 0; ,大概是因为 vc6 是 98 年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上 return 语句了吧!不过,gcc3.2(Linux 下的 C 编译器)会在生成的目标文件中加入 return 0; 。

 

2. C++: 

      C++98 中定义了如下两种 main 函数的定义方式: [Page]int main( ) int main( int argc, char *argv[] ) (参考资料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and termination)   int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的用法也和 C99 中定义的一样。同样,main 函数的返回值类型也必须是int。如果main函数的末尾没写return语句,C++98 规定编译器要自动在生成的目标文件中加入 return 0; 。同样,vc6 也不支持这个特性,但是 g++3.2(Linux 下的 C++ 编译器)支持。

 

3. 关于 void main:  

      在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main 可以通过编译(如 vc6),但并非所有编译器都支持 void main ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用 int main 。   

      总而言之: void main 主函数没有返回值 main 默认为int 型,即 int main(), 返回整数。 注意,新标准不允许使用默认返回值,即int不能省,而且对应main函数不再支持void型返回值,因此为了使程序有很好的移植性,强烈建议使用: int main() { return 0; /* 新标准主函数的返回值这条语句可以省略 */ }

 

      读到这里,大家应该了解了main函数返回值的来龙去脉了。下面介绍一下main函数返回值的作用以及如何获得这个返回值。main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出。返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。下面我们在winxp环境下做一个小实验。首先编译下面的程序:

 int main( void )
{

      return 0;
}

      然后打开附件里的“命令提示符”,在命令行里运行刚才编译好的可执行文件,然后输入“echo %ERRORLEVEL%”,回车,就可以看到程序的返回值为0。假设刚才编译好的文件是a.exe,如果输入“a && dir”,则会列出当前目录下的文件夹和文件。但是如果改成 "return -1”,或者别的非0值,重新编译后输入“a && dir”,则dir不会执行。因为&&的含义是:如果&&前面的程序正常退出,则继续执行&&后面的程序,否则不执行。也就是说,利用程序的返回值,我们可以控制要不要执行下一个程序。这就是int main的好处。也可以把main函数的返回值类型改成非int类型(如float),重新编译后执行“a && dir”,则程序异常退出,dir不会执行。顺便提一下,如果输入a || dir的话,则表示如果a异常退出,则执行dir。

    

     如果是在linux下,在shell终端下输入echo $?,则显示main函数的返回值。例如:

     MainTest.c

    #include <stdio.h>

     int main()

    {

           printf("I am main function./n");

           return 0;

    }

 

   

 

 

 

【C语言】语义陷阱探秘(八):main函数返回值的重要性与误区 在C语言中,main 函数是程序的入口点。根据C标准,main 函数应该返回一个整数值(int),这个返回值通常用于指示程序的退出状态。尽管在很多情况下,开发者可能会忽略为 main 函数提供明确的返回值,但这种做法并不总是安全的,并且可能会导致一些潜在的问题。 阅读详情

相关推荐

Acgis中实现栅格经纬度和行政区关联

目前已有意大利的shp文件,希望将意大利划分成0.1*0.1经纬度的栅格,并且关联每个栅格中心点所属的省份信息。最终希望得到的输出是一个表格,里面包含栅格的经纬度、所属省份信息。

qq_42183184的博客 3369

细谈C语言中的main返回值

<br />      C语言几乎是所有人的第一个编程语言,而main函数则又是我们接触到的第一个函数。我们的所有程序都需要main函数,对于下面的代码,相信大家再熟悉不过了。<br /> #include <stdio.h> void main() { printf("I am main function./n"); }<br /> <br />接下来再看一段很相似的代码。<br />#include <stdio.h> int main() { printf("I am mai

piaojun_pj的专栏 3万+

STM32 BLDC无刷电机霍尔信号捕获与换相控制实战解析

本文深入解析了STM32如何实现BLDC无刷电机的霍尔信号捕获与换相控制。详细阐述了硬件接口配置、定时器霍尔传感器模式的使用、抗干扰的滤波器与软件容错设计,以及中断服务与换相逻辑的实战代码。重点解决了信号抖动、换相不准等常见问题,旨在帮助开发者构建稳定可靠的电机驱动基础。

weixin_29193259的博客 367

C语言主函数返回值问题:return type of 'main' is not 'int' [-Wmain]

当c语言main函数,返回值是void时,有提醒:return type of 'main' is not 'int' [-Wmain]

jh0703的博客 1万+

S.BUS协议及编解码,C语言源码

1、简介 SBUS本质是一种串口通信协议,采用100K的波特率,8位数据位,两位停止位,偶效验,即8E2的串口通信。 值得注意的有三点: 1.SBUS采用负逻辑,所以无论接收还是发送都要进行硬件取反(注意,一定要硬件取反),电路如下 这是我在网上看资料时看到的电路,实际上我用的是下面这个电路 2.SBUS有两种模式, a.高速模式:每4ms发送一次 b...

qq_31232793的博客 1万+

【photoshop CEP插件】 OCR文字识别

一个photoshop CEP插件OCR文字识别 APP_ID = 17594920 API_KEY = puMFv72xqCYV2jdcSlXgtFvm SECRET_KEY = v5XHtqKXEm0p6ehPZrXIXrftDvocyv1m /*********************************************/ 百度OCR 密钥由Greless@qq.com 提供, 用户可自行前往https://ai.baidu.com/docs#/Auth/top 申请。 通用文字识别..

Greless的后花园 6487

C语言:[Warning] return type of ‘main‘ is not ‘int‘ [-Wmain] 解决办法

[Warning] return type of 'main' is not 'int' [-Wmain] 产生原因和解决办法

longhp的博客 1303

手把手教你学Simulink--基础电机控制场景实例:基于Simulink的无刷直流电机六步换相仿真

摘要:本文详细介绍了基于Simulink的无刷直流电机(BLDC)六步换相仿真方法。文章首先阐述了BLDC六步换相控制的原理,包括霍尔传感器定位、六步换相逻辑和方波电流驱动三大支柱。然后通过电动工具(角磨机)应用场景,展示了如何在Simulink中搭建完整的六步换相系统:从主电路构建、霍尔信号生成、Stateflow换相逻辑实现到开环电压控制。仿真结果显示该系统具有低成本优势(仅需霍尔传感器),但存在±20%转矩脉动。文章还提供了核心代码实现,包括霍尔信号生成、六步换相状态机和转矩分析脚本,并对比了六步换相

MHD0815的博客 149

主函数的返回值返回给谁,'main'函数的返回值在哪里去?

In C, a function always returns its value to the calling function and never to itself (if return type is not void). Like,int main()But since 'main' function is called by the Operating System, which is...

weixin_34563472的博客 421

【高级】系统架构师 | 2026年上半年案例分析真题

标准答案:系统因缺乏足够历史数据(用户行为、物品信息或评分等),难以做出准确推荐的问题。另外两种:物品冷启动(新课程 / 新知识点缺少互动数据)系统冷启动(平台上线初期整体数据稀缺)类型典型表现常见缓解用户冷启动新注册学员无历史问卷/前测、热门兜底、人口统计学特征、知识图谱前置测评物品冷启动新课无人学无人评内容特征推荐、专家标注、探索流量系统冷启动新平台双边都稀缺规则引擎、运营冷启、知识图谱强约束路径本题已点明「用户冷启动」,另外两种按推荐系统经典三分法作答即可。

大胆尝试,小心实践 358

【制作100个unity实战之2】实现一款简单的FPS游戏

你将学到: fps武器脚本 基础瞄准功能 僵尸敌人AI 巡逻范围 攻击间 搜寻半径 追击 枪声吸引周围的僵尸 击中僵直效果

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3551

C语言main函数返回值详解

前言:本文程序代码均在Windows + mingw64环境下编译完成(gcc) C语言的main函数有两个标准写法 // C99加入两种 main 标准写法 int main(void) // 标准一写法 // 和 int main(int argc,char *argv[]) // 标准二写法 int main(int argc,char **argv) // ...

任逍遊 --- [专用空间] 3万+

[QMT和ptrade量化交易小白入门]-120、卖出深度虚值期权的三重过滤策略

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 282

C语言main函数参数、返回值

C语言main函数返回值: main函数的返回值,用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其他数字的含义则由系统决定,通常,返回非零代表程序异常退出,即使程序运行结果正确也仍需修复代码。 C语言main函数写法 void main()是错误的,C/C++中从来没有定义过main。C++之父 Bjarne Stroustrup 在他的主页上的 FA...

Ai_King的博客 3058

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C语言之Main函数返回值问题

C语言之Main函数返回值问题分析 C语言之Main函数返回值问题分析: 很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not a

wo17fang的专栏 1315

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言之Main函数返回值问题分析

C语言之Main函数返回值问题分析: 很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 "The definition void main( ) { /* ... */ } is not and never has been

学如逆水行舟,不进则退 2824

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

c语言main()函数返回值问题

C语言之Main函数返回值问题分析 C语言之Main函数返回值问题分析: 很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not a

u013845185的专栏 704

为什么C语言要有 int 作为 main 函数的返回值,而不是 void?

是 C 语言的一项重要设计,体现了 C 语言和操作系统之间的紧密结合。,程序将无法显式地返回退出状态码,而操作系统可能会分配一个默认的退出状态码(通常是未定义行为,依赖于具体的编译器和系统实现)。C 语言起源于 Unix 系统,而在 Unix 系统中,程序的退出状态由一个整数表示。),程序将无法提供退出状态码,操作系统无法知道程序的执行结果。退出状态码为整数的设计,方便了 Unix 系统中脚本和其他程序对子程序的结果进行判断。,它只适用于简单的程序,而无法满足复杂系统中程序互相协作的需求。

小宝哥Code的专栏 1773

C语言main函数的参数及其返回值详细解析

main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出 返回值的作用 main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。下面我们在winxp环境下做一个小实验。首先编译下面的程序: int main( void )

share Coding 2072

详解C语言和C++中的main()函数返回值

返回值main应指示程序如何退出。返回值为0表示正常退出main。异常退出通常通过非零返回来表示,但是关于非零代码没有明确的标准。另外,void main()在C ++标准库明确被禁止,不应该被使用。在C++中合法的main函数使用方法如下: int main() 以及: int main(int argc, char* argv[]) 也等价于 int main(int argc...

Vermont_的博客 2108

C语言main函数返回值问题

C语言之Main函数返回值问题分析 很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and neve

cason0530的专栏 941
上一篇: C语言中全局变量初始化的重要性!!!
下一篇: C和C++中内存的划分
macrohasdefined
博客等级 码龄15年 44粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值