[转]void main()还是int main()

int main()和void main()有什么区别 其实main也是一个函数; (1) #include<stdio.h> void main(){ } void main() 这样定义只是说明main函数没有返回值。 (2) #include<stdio.h> int main(void){ return 0; } int main(void)和int main()是一样的(括号里没有东西就相当于void) 说明main函数有一个int类型的返回值。 int main()是C语言的规范,要求main函数返回一个int类型 阅读详情

最近在论坛上看到有不少网友的程序中,main函数都写成void main(),而不是int main()。那么,到底哪个是正确的,或至少是推荐使用的呢?这篇文章本来是自己想写的,但有些概念不是很清楚,于是在网上搜索了一下,发现了moon网友的一篇非常好的文章,对很多模糊不清的概念都讲解的非常清楚,值得学习和借鉴,特转载过来,一起学习。全文如下:

main函数的返回值大家注意了吗,也许有人会说可以没有返回值,如果你深入到程序的CRT启动代码,你会发现....
__initenv = envp;
mainret = main(argc, argv, envp);
if ( !managedapp )
   exit(mainret);
if (has_cctor == 0)
   cexit();
按照新的C99标准,即使函数本身没有定义返回值,编译器也会加上,以返回给激发程序,运行状态。很多人甚至市面上的一些书籍,都使用了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 )。下面我分别说一下 C 和 C++ 标准中对 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 函数的定义方式:
int main( )
int main( int argc, char *argv[] )
(参考资料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and termination)

(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函数的返回值用于说明程序的退出状态。如果返回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”,看看会出现什么情况,想想为什么会出现那样的情况。顺便提一下,如果输入a || dir的话,则表示如果a异常退出,则执行dir。

C/C++ main函数四种写法详解:int main()、void main()、main()、int main(void)的区别与标准 在C/C++编程中,main函数作为程序入口,其签名写法直接影响代码的可移植性和标准符合性。从语言标准原理来看,操作系统需要通过返回值获取程序执行状态,这决定了main函数应返回int类型。在技术价值层面,遵循ISO/IEC标准能确保代码在不同编译器和平台间的兼容性,避免未定义行为。实际应用场景包括命令行工具开发、跨平台项目、嵌入式系统等,都需要正确处理main函数签名。本文聚焦int main()、void main()、main()和int main(void)这四种常见写法的区别,其中void mai 阅读详情

相关推荐

示波器面板上的隐藏功能:如何利用BW Limit和EXT TRIG提升测量精度

本文深入探讨示波器面板上的隐藏功能BW Limit和EXT TRIG,揭示它们如何提升测量精度。通过带宽限制(BW Limit)有效滤除高频噪声,结合外部触发(EXT TRIG)确保稳定信号捕获,为电子测量提供专业解决方案。特别适用于开关电源、传感器信号等复杂场景的高精度测量需求。

weixin_30300225的博客 518

C语言---void main()、int main()、main()、return 0

void main()、int main()、main()、return 0

享你所想 3679

关于RS485通讯TVS器件选择的经验

先说经验结论 如果你的RS485用于频繁热拔插, 比如作为手持终端使用, 且手持器与目标板非隔离, 那么使用6.8CA可能是更好的选择.因为有热拔插会产生浪涌, 而且在非隔离的场合有些工业设备接地也是无法保障的.对于使用场景较为单一的, 点对点或点对多场合. 可以使用最大峰值脉冲电流较小的SM712.这是在长期的产品设计中得到的经验. 仅供参考 一. TVS的工作原理和作用 瞬态电压抑制二极管 ...

qq_20163075的博客 6510

C语言的void 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.(...

corleone_4ever的博客 1万+

9 海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例

海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例 快速入门 工业机器视觉 机器视觉

HuangGong2022的博客 7176

差分分析.

差分分析是一种强大的密码攻击技术,通过研究明文差分与密文差分的关系来破解加密算法。本文系统介绍了差分分析的核心概念和方法: 基础差分分析:通过异或运算抵消密钥影响,利用差分分布表(DDT)寻找高概率差分特征,以FEAL-4为例展示了具体攻击过程。 高级差分技术:包括截断差分分析(关注部分特征)、不可能差分分析(排除概率为0的路径)和飞来去器分析(将算法分段处理)。 自动化搜索方法:介绍了松井算法和MILP(混合整数线性规划)方法,将差分路径搜索转化为数学优化问题。 这些方法展现了差分分析从基础理论到现代应用

weixin_61562383的博客 786

浅谈c/c++中main(),int main(),void main(),int main(void)四者之间的区别

main():相当于int main()int main():int是main()函数的返回类型。这表明main()函数返回的值是整数且授受任何数量的参数。void main():void为空型。这表明main函数无返回值目受任何数量的参数。int main(void):main不接受任何参数且返回的值是整数。另外请注意:main()为老式的写法。返回类型int在新型的编泽器通不可以省略,否则会有警告:void main()为老式的写法。6.0及之前的vC使用这祥的写法。

weixin_44057803的博客 2万+

Python实现飞书机器人定时发送文本、图片等群消息

python实现飞书群自动发送告警消息

tyh_keephunger的博客 2万+

int main()、void main()和int main(void)的区别

int main(void) int表示main()函数应该返回应该整数,void表明main()不带任何参数。有返回值的C函数要有return语句,如果遗漏main()函数中的return语句,程序在运行至最外面的右花括号时会返回0,所以可以省略main()函数末尾的return语句。int main() 在C++中int main()和int main(void)没有区别。在C中,void指定了函数不接受任何参数,而int main()未指定任何参数,则可以是没有参数或者任意个参数。

DBEBCXRQ的博客 5080

一生一芯——用RTL实现最简单的处理器NPC(南大数逻计组RV32ICPU) 代码及思考参考

本文介绍自己前期用Verilog编写的基于RV32I指令集的CPU,个人认为是最简单最易懂的版本(即没做什么优化,即代码很水,没有考虑一些奇怪的情况,只适用简单指令序列,即题目所示最简单的处理器),适合新手练手Verilog以及了解简单CPU的运行过程。本文基于一生一芯,利用Verilator进行仿真,并用gtkwave查看波形,不了解verilator和gtkwave的可以看前几篇文章。

long0_o的博客 3310

4.6 知识库使用指南:如何让AI Agent拥有专业知识

本文介绍了如何为AI Agent构建和使用知识库。知识库的作用是为Agent提供专业知识,包含文档、数据和规则,可用于专业问答和知识检索。使用方法包括创建知识库(上传文档)、向量化处理、知识检索以及在Agent中的应用。核心要点是理解知识库的价值和使用流程。文章还提出了构建方法、检索优化和应用实践等思考题,建议准备高质量数据、优化检索效果并持续更新知识库。下节将介绍用LangGraph构建复杂AI应用。

yonggeit的博客 3011

void main和int main的区别

其实main也是一个函数; #include<stdio.h> void main(){ } 如上代码所示,void main() 这样定义只是说明main函数没有返回值。 #include<stdio.h> int main(void){ return 0; } 如上代码所示,int main(void)和int main()是一样的(括号里没有东西就相当于void) 说明main函数有一个int类型的返回值。 int main()是C语言的规范,要求main函...

m0_62520055的博客 3万+

Google Earth Engine(GEE)——将sentinel - 2影像所有波段重采样到10m分辨率 (resample 和 projection的使用)

影像重投影是将一个影像从一个坐标系投影到另一个坐标系的过程。这通常涉及到将像素从一个平面坐标系变换到另一个平面坐标系。这可以用于许多应用中,例如建立数字高程模型(DEM)和地图制图。影像重投影通常需要进行数学计算,包括转换矩阵和插值算法,以确保像素值的准确性和精度。这次我们将对哨兵2好数据中20m分辨率的波段,重采样到10m分辨率中,然后同一参与计算。

此星光明博客 3108

C 语言 int main() 和 int main(void) 的区别

在C语言编程中通常会看到 **int main()、int main(void)、void main(void)、main()和main(void)、int main() 和 void 首先来看看标准的主函数写法是什么样的,在C99标准(ISO/IEC 9899:1999)的5.1.2.2.1 Program startup一节是这么描述的: The function called at program startup is namedmain. The implementation declar

qq_41853417的博客 4万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

辨析int main()、int main(void)、void main(void)、main()和main(void)、int main() 和 void main()

//--------------------------------------------------标准的main函数格式为:int main(int argc, char *argv[]); /*即返回值为整型,带两个参数,argc为命令行参数的个数,argv为指针数组,                                                  前argc个指针为参数...

csdnndsc_wxh的博客 4万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++之 main() ,void main() ,int main()等区分

1、各种main函数 大家在看各种C++代码主函数时,发现,写法有很多种,比如: int main() { //代码 return 0; } int main(int argc, char* argv[]){ //代码 return 0; } void main() { //代码 } //…… 2、对比 这些主函数本质上的区别是返回...

水亦心的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言中void main和int main有什么区别?

区别: 1、有无返回值 void main没有返回值,int main有返回值。 2、返回值类型 int main返回int类型的数据,void main不返回。 但是在C语言推荐写法中,建议使用int main,因为在有的编译器虽然viod main可以通过编译,但在其他编译器就会报错。为了代码拥有更好的可移植性,一般写int main。 补充: 至于什么时候需要哪种写法,没必要较真。可以一律都写成 int main ,然后在方法体中最后加个return 0 ;就行了,这样写基本上所有的编译

z1521985226的博客 5万+

int main()和void main()的区别

#include

chen_9271的博客 3万+

在C/C++中int main()、void main()、int main(void)和void main(void)之间有什么意义区别

一、主函数也是函数 首先我们要了解C/C++中函数的定义,因为main函数也是函数,与其他函数的区别只是主函数是程序的主线而已,程序从它开始也在其中结束。一个函数由函数名、其前的类型标识符、其后小括号里声明的类型的参数(叫形式参数或虚拟参数)和大括号里的函数主体构成。主函数main也不例外。 二、main前面用int还是void? main前面的是类型标识符,也就是类型名,其决定的是函数返回值的类型,int指有返回值且返回值为整形,void表示“空”即没有返回值。 很多函数是不需要返回值的,只作为语句执行就

m0_z的博客 1万+

C语言中int main(void)与int main()的区别

int main(void) 指此函数的参数为空,不能传入参数,若输入参数则会出错,但必须要有返回值,如return 0;。 int main()可以传入参数,程序可以不需要返回值。 但在c++中二者没有区别。 ...

qq_44857137的博客 3万+

C--int main 和void main的区别

1.void和int表示的是主函数的返回值,void返回的是空值,int返回的是一个整型数值。用的是int main,在程序结束时必须写上return 0(或者任何一个整数);而用的是void main就不需要return返回语句。 2.void main 和 int main的区别就是有无返回值在int main 可以出现非 int 类型的东西我们在写代码时,一个函数要么有返回值,要...

ai516001066的博客 1万+

为什么是int main()而不是void main()

这里写目录标题C/C++ 小误区:void main()CC++关于void main返回值的作用那么 int main( int argc, char *argv[], char *envp[] ) 呢? C/C++ 小误区:void main() 这是基于我们学校老师一直使用void main(),而发的感慨,大一学习C语言时,我就在想,老师上课演示的为什么一直用void main(),而不是int main()呢?不为了偷懒?还是习惯性的语句呢?在查阅了部分大牛的博客,翻阅了C Primer Plus

Grit的博客 5354

【06】main()、void main()、int main() 的区别与规范

1️⃣。

智木芯语的博客 1973

C语言——int main,main 和 void main;return

先简而言之 1.void 和 int 表明声明不同的主函数返回值,不声明则默认返回值为int整型。 2.int main可移植性强。 3.C语言从来没声明过```void main```,只声明过```main()```。 3.抛弃一切用```void main```编写C程序的习惯!   稍微深入 main函数,又称主函数,作为绝大大部分C程序唯一的入口(比如windows编程中可

阿呆的博客 2606

int main(void)和void main()的区别

#include<stdio.h> void main(){ } #include<stdio.h> int main(void){ return 0; } void main() 这么定义只是说明main函数没有返回值 int main(void)和int main()是一样的,括号里没有东西就相当于void, 只是说明main函数有一个int类型的返回值 ...

qq_45763093的博客 5824

【C】在main文件中,int main 和 void main有什么区别?

首先,给出结论:推荐始终使用intmain(),并且在main函数的最后返回0:return0;,表示程序成功执行。即使不写return0;也没有关系。下面我将详细解释intmain()和voidmain()之间的区别,并解释为什么intmain()是标准写法,而voidmain()是非标准的。

m0_46152014的博客 2003
上一篇: [转]HUSTOJ管理问题
下一篇: [转]HUSTOJ建立分布式判题系统
知足--常乐
博客等级 码龄10年 622粉丝 268原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值