该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

Dairy 2/21 Declaration of Main

开始学C了,在C吧看了看,发觉,还是有很多人喜欢用void main(),好吧,这与我无关。但是,还是喜欢能够帮到大家。当然,如果有人认为我说的不对,私底下骂就可以了。

话说我还是一个菜鸟的时候,第一个知道的C知识就是每个C程序都要有一个main(),可是,我发现,关于main()的使用,版本实在是太多了,比如:

• main()

• main(void)

• void main()

• void main(void)

• int main()

• int main(void)

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

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

• int main(int argc, char** argv)

and so on

于是乎,我抑郁了。

在C++正式入门后,这个问题总算是解决了。

一个C/C++程序编译成exe后,由系统调用,一些系统会要求exe程序执行完后返回一个值,表明程序的执行状态。比如Unix,MS-Dos。

也就是说,main()必须有返回值!虽然某些时候,没有返回值也不会出错。(有时,这个返回值系统可能不需要,但它要不要是一回事,你给不给就是另外一回事了,性质不一样。要是敢不给。。。)

在C标准中,main()只有两种合法声明:

Int main(void)

Int main(int argc, char* argv[]) (char* argv[]有许多不同的写法)

那么,为什么有那么多的main()版本呢?

在C中,当没有指定返回值类型时,默认返回值为int,所以,main()和main(void)的写法很常见,它们与前者是一样的,都会返回int。(TCPL中用的就是main())。

那个括号里的void又是怎么回事呢?它说明这个函数没有参数。

在很早的C中,f(),并不意味着函数f没有函数,而是说,它可以接受任意参数,相当于f(…),在新的C中,为了和以前的C兼容,保留了这种用法。但这妨碍了函数的参数一致性检查。为了表示函数没有参数,引入了void符号,表示没有参数。(不过后来这被认为不是好的设计,它不但丑,而且逻辑上是多余的。所以C++中不用了)

综上,我推荐使用int main()。(这里就不使用int main(void)了)

(main()在C++中不能用,因为C++不支持默认返回类型为int,C为了C++兼容,这种用法也不用了)

记住,要在main()函数体末尾加上return 0;(返回0表示程序正常执行)。不过这有时是多余的,多数编译器会自动帮你加上。所以TCPL中,都没有return 0;但最好还是写上,这样代码意图更加明确。特别是有些编译器在你没写时会报错(“main没有返回值“)。。。有些自作聪明的人为了防止报错,就发明了这种写法:void main(),然后。。。就不会报错了,再然后,它流传开了,更糟的是,有些时候,编译出的程序还能够用。。。

那么,如此声明会带来什么严重的后果呢?它可能让程序无法执行!!!(调用者可能不会理这个程序)。(还有万分之一的例外(参见宿主实现和独立实现),不要去想它)

另外,为了能与C++兼容,我们也不应该使用void main(),这种用法在C++中是绝对错误的。

最后,解释一下这个问题,为什么那么多书都用了void main()。

应该说,他们是很不负责任的,他们没有按照C标准来写代码。使用void main()的写法,原因大概有:

• 编译器经常提示”main 没有返回值”,有的人嫌烦,用了void,而且在他的机子上正好可以运行,于是乎。。。

• 看别人这么用,自已也就这么用了。(他们可能都没有在编译器上亲手实验过自己写的书中的代码,或者只在一个环境下试过,这是很不负责任的。好的书上的代码会在至少两种编译器上进行测试)

c语言main的性质,关于main()相关推荐

  1. c语言规定在一个源程序中main函数的位置是什么?

    一个c程序有且仅有一个main函数,除main函数之外可以有若干个其它的函数,每个函数实现某一特定的操作. C语言规定,在一个源程序中,main函数的位置可以任意. 因为:在一个C语言源程序中,程序总 ...

  2. c语言程序执行完main函数后,一个c程序在执行main函数之前和main之后都做了那些事情啊该如何解决...

    当前位置:我的异常网» C语言 » 一个c程序在执行main函数之前和main之后都做了那些 一个c程序在执行main函数之前和main之后都做了那些事情啊该如何解决 www.myexceptions ...

  3. c 语言 int argc,C语言深度学习之int main(int argc,char **argv)的理解及延申

    C语言深度学习之int main(int argc,char **argv)的理解及延申 前者为可接受 命令行参数,argc表示参数个数, argv[]是参数数组,其中第0个参数是程序本身的名称(包含 ...

  4. c语言 in function main,C语言提交后显示编译结果main.c: In function `main':是啥意思?...

    在第一次引用y变量前没有给y赋值,比如int y; printf("%d\n",y);会报你的那种警告,但是int y; y = 10; printf("%d\n&quo ...

  5. c语言源程序main的位置,c语言规定在一个源程序中main函数的位置是什么?

    c语言规定在一个源程序中main函数的位置可以是任意的:因为一个C程序总是从main函数开始执行,并在main函数中结束,不论main函数在整个过程中的位置如何. 一个c程序有且仅有一个main函数, ...

  6. C语言 | C语言中main函数:int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

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

    这里写目录标题 C/C++ 小误区:void main() C C++ 关于void main 返回值的作用 那么 int main( int argc, char *argv[], char *en ...

  8. main方法_错误: 在类 ZiFUChuan.Pyramid 中找不到 main 方法, 请将 main 方法定义为:

    错误: 在类 ZiFUChuan.Pyramid 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 Java ...

  9. android执行main函数,AndroidStudio执行main方法报错

    问题: 有时在开发中想直接写一个java文件来测试一些东西,但是AndroidStudio执行的时候会报错. 代码信息: public class HelloWorld { public static ...

最新文章

  1. 主成分分析(PCA) C++ 实现
  2. centos 安装 svn
  3. JS验证控制输入中英文字节长度(input、textarea等)
  4. CentOS中提示rz命令找不到安装lrzsz来解决
  5. string函数知识点总结
  6. IntelliJ IDEA 2018安装+激活+汉化(详细图解)
  7. 1227:Ride to Office
  8. python比较两个文件内容是否一样_python判断两个json文件是否相等
  9. 生物信息常用网站(数据库)
  10. elasticsearch搜索推荐系列(二)之 java实现中文转化为拼音与简称
  11. SequoiaDB巨杉数据库成为唯一入选 “硅谷2016 大数据地形图”中国厂商, 企业级市场超越MongoDB等海外产品
  12. 【锁机制】MySQL锁机制
  13. Markdown 数学公式详解
  14. 无法启动此程序因为计算机中丢失d3dx941,d3dx_941.dll最新版
  15. 手机上网、3G、wifi
  16. 国内航班最快明年可实现上网打电话
  17. 安川最小巧机器人_盘点日本最值得关注的工业机器人13大巨头!
  18. 深入浅出C语言——C语言简介
  19. yii2的加密解密那些事儿
  20. DataGrid使用技巧大杂烩

热门文章

  1. conda安装tensorflow-gpu简洁版_【DP系列教程02】DeePMDkit:conda安装 amp; 离线安装
  2. 如何控制Facebook投放广告成本,提高利润?
  3. 务必了解的跨境电商ERP独立部署!
  4. 深度学习-吴恩达-笔记-7-超参数调试、Batch正则化和程序框架
  5. Nginx Unit 1.8.0 发布,动态 Web 应用服务器
  6. java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮
  7. 计算机科学与技术素材,计算机科学与技术ppt素材
  8. 利用nginx重写url参数并跳转
  9. window10删除目录时提示没有找到该项目
  10. 第1章 Ext JS开发基本环境准备与项目创建[3/4]