main函数的正确格式
main函数称之为主函数,一个C程序总是从main()函数开始执行的。在关于C语言的网贴和图书中,可以看到main函数的多种格式,这些格式,有的是正确的,有的是不正确的,为了避免错误,现归纳整理如下。
一、main函数头的格式:
1.int main(int argc, char *argv[])
推荐指数:★★★★★
有参数的格式,这是符合C89、C99标准的写法。第一个参数argc(argument count)是命令行中的字符串个数。第二个参数argv(argument value)是一个指针数组,一般程序名赋值给argv[0],从argv[1]开始对各个参数依次赋值。
如执行命令:dir /a /p
则:argc=3,argv[0]=dir,argv[1]=/a,argv[2]=/p
int main(int argc, char *argv[])
{ return ;
}
2.int main(void)
推荐指数:★★★★★
无参数的格式,这是符合C89、C99标准的写法。
int main(void)
{ return ;
}
3.int main()
推荐指数:★★★☆☆
无参数的格式,相当于第2种写法,C89标准中允许,常用的编译器也支持这种写法,但不符合最新的 C99 标准。
int main()
{ return ;
}
4.main()
推荐指数:★☆☆☆☆
无参数的格式,相当于第3种写法,C89标准中允许,但不符合C99 标准。第一版的C语言只有int一种类型,没有char,long,float等,既然只有一种类型,那么就可以不写,后来的改进版为了兼容以前的代码于是规定:不明确标明返回值的,默认返回值为int,也就是说 main()等同于int main()。在C99标准中,要求编译器至少给 main() 这种用法来个警告。尽管这种写法也能通过编译,但强烈建议不要因为少敲几个字母而去这么写。
main()
{ return ;
}
5.void main()
推荐指数:☆☆☆☆☆
不推荐这种写法。在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把 main函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地表示:void main( ) 的定义从来就不存在于 C++ 或者 C 。虽然有的编译器中,void main 可以通过编译(如 vc6),但标准中从来没有定义过 void main 。所以,如果你想你的程序拥有很好的可移植性,请一定要用int main。
void main()
{ }
二、main函数返回值:
main函数的返回值类型是int型的,而程序最后的 return 0正与之呼应,0就是main函数的返回值。那么这个0返回到那里呢?返回给操作系统,表示程序正常退出。
如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中加入return 0,表示程序正常退出。注意,C-Free的MinGW5编译器自动加入的是return 1,VC6不会在目标文件中加入return 0。尽管省略return语句后,C-Free和VC6等一些编译器也能通过编译,但仍建议最好加上return语句,养成良好的遵守标准的习惯。
main函数的正确格式的更多相关文章
- main函数参数解析
int argc,char *argv agrc表示参数的个数 argv储存参数 这个函数的意思是逐一输出参数 实际上,main函数也可以带参数.带参数main函数的定义格式如下:void main( ...
- C99 中 main 函数的写法
今天在论坛看见有人讨论 C 语言中 main 函数的写法,看到结论才知道 main 函数的正确写法. 被老谭酸菜坑了这么多年,还是记录下吧,或许以后某天不搞 .net,回去折腾 C 语言了. 写法1: ...
- main函数与命令行参数
main函数的概念 C语言中main函数称之为主函数 一个c程序从main函数开始执行的 下面的main函数定义正确吗? main函数的本质 main函数是操作系统调用的函数 操作系统总是将main函 ...
- C++-main函数与命令行参数
1.main函数的概念 C语言中main函数称之为主函数 —个C程序是从main函数开始执行的 下面的main函数定义正确吗? //1 main(){ } //2 void main(){ } //3 ...
- 常用跨平台IDE如何添加main函数的参数并正确执行
1. Eclipse-cdt如何添加main函数参数: 打开eclipse,新建工程.新建源文件,此处以C语言为例,写入代码如下: #include <stdio.h> //int arg ...
- Linux下main函数启动过程【程序员自我修养笔记】【自用】
1. 入口函数和程序初始化 1.1 程序从main开始吗? 当程序执行到main函数的第一行时,很多事情都已经完成了: [证1]如下是一段C语言代码: 代码中可以看到,在程序刚刚执行到main的时候, ...
- 解析main函数的命令行参数
原创文章,转载请正确注明本文原始URL及作者. 介绍 写C/C++程序,我们常常需要把main函数的参数作为选项来传递.在linux中,解析选项有专门的函数可以用. int getopt(int ar ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
- Knowledge Point 20180303 详解main函数
学习Java的朋友想来都是从HelloWorld学起的,那么想来都对main函数不陌生了,但是main函数究竟是怎么回事呢?main函数中的参数是做什么的呢?main函数为什么能作为程序的入口呢?可不 ...
随机推荐
- mongodb windows下的安装
(1)上mongodb的官网下载windows版本的mongo的安装包,安装包是绿色版的解压出来就可以直接使用. (2)将解压出来的bin文件夹复制到c:\mongoDB下(c:\mongoDB这个文 ...
- POWER DESIGN
一.概念数据模型概述数据模型是现实世界中数据特征的抽象.数据模型应该满足三个方面的要求:1)能够比较真实地模拟现实世界2)容易为人所理解3)便于计算机实现 概念数据模型也称信息模型,它以实体-联系(E ...
- SuperMapDeskTop中去除面图层边框
0.项目中有个功能需要在超图DeskTop中修改面图层的符号,将要素的边框去掉.搞来搞去这个功能并不像ArcGisDeskTop一样直接有无边框的符号,通过请教,通过修改面图层的线样式的RGB颜色管理 ...
- CXF(2.7.10) - WSDL2Java generated Client
以调用 http://www.webxml.com.cn/ 提供的 IpAddressSearchWebService 服务为例. 1. 使用 wsdl2java 工具,根据 wsdl 生成 JAX- ...
- Spring(3.2.3) - Beans(1): Spring 容器
BeanFactory & ApplicationContext org.springframework.beans.factory.BeanFactory 是最基本的 Spring 容器接口 ...
- 编译mosquitto出现的问题
[root@localhost mosquitto-1.3]# make WITH_TLS=no set -e; for d in lib client src; do make -C ${d}; d ...
- Android Studio 快捷方式
Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如g ...
- HDU(搜索专题) 1000 N皇后问题(深度优先搜索DFS)解题报告
前几天一直在忙一些事情,所以一直没来得及开始这个搜索专题的训练,今天做了下这个专题的第一题,皇后问题在我没有开始接受Axie的算法低强度训练前,就早有耳闻了,但一直不知道是什么类型的题目,今天一看,原 ...
- Android之点击切换图片
package com.example.SlidePictures; import java.util.Timer; import java.util.TimerTask; import com.ex ...
- Linux 最常用命令小结
1. 文件共享 1).将windows 系统下的文件夹共享到linux的方法: 安装filezilla,设置连接linux 服务器.将文件上传. 2).mRemote 机器连接管理 2. 文件管理命令 ...