mac os系统的xcode为什么main函数不能用void只能用int
有mac系统能用void的c语言软件吗
xcode定义main主函数的时候为什么不能用void 只能用main
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- include_iostream_ 2021-11-07 17:23关注
简单结论:除非您在一个非常特殊的系统或者裸机上写程序(MacOS显然不满足这种条件),否则您应该放弃试图令main函数返回void。当然,这仅仅是建议。
====分割线====
首先,C++语法标准规定main的返回值必须是int。经过考证,我相信C++标准也从未允许过这样做。当然,不排除有些编译器仍在标准之外允许返回void,但我并不知道有哪些编译器有这种功能。退一万步,即便旧标准允许你这样做,我也还是建议你遵循这个规定。毕竟,不能用新语法的代价太大;C++这些年的语法产生了天翻地覆的变化。(尽管学校里的课程并不能体现这点,但工作中很少有执着于旧标准的单位,相当一部分工程师也会追随新标准。执着于旧标准意味着你和同事们的合作也会变得困难。)
对于C而言,我到StackOverflow确认了下,C语言从未规定过返回值为void的main函数,但允许实现定义的签名(implementation-defined signature)。因此结论是:无论是C还是C++,我们都不建议令main返回void,因为这是不标准的,而且从未成为过标准。有些教材言之凿凿地声称可以这么写,(引用StackOverflow的回答原文)这样的教材不是过于老旧就是水平太差,也可能两种因素都存在。换言之,这么做会引发可移植性问题,具体而言就是可能引发UB,而这种级别的UB可以引发从没有异常到系统发生不可恢复的崩溃(比如说硬盘彻底损坏)在内的不可预测的后果。
因此,想要使用void返回值的main函数,只能去翻找编译器的特定版本实现,并认真阅读编译器文档,确认它真的不会引发UB。(能过编译不代表不会引发UB。)此外,由于这种做法是不标准的,编译器随时可能取消支持。因此,哪怕是同一个编译器,也不可能保证永远支持void main()。
====分割线====
参考资料:
建议直接看C标准原文引用,最权威:What should main() return in C and C++? - Stack Overflow What is the correct (most efficient) way to define the main() function in C and C++ — int main() or void main() — and why? And how about the arguments? If int main() then return 1 or return 0? The... https://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c/31263079#31263079int main() vs void main() in C - Stack Overflow In C, I know that int main() returns an int where void main() does not. Other than that, is there a difference between them? Is the first better than the second? https://stackoverflow.com/questions/9356510/int-main-vs-void-main-in-cWhy is the type of the main function in C and c++ left to the user to define? - Stack Overflow Why is main() a user defined function ? When will I use void main() and int main()? https://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left-to-the-user-to-define/5296593#5296593c - Why don't we use (void) in main? - Stack Overflow People use void main() /*empty parens ()*/ I have been taught to write void main(void) Any ideas what the difference is? https://stackoverflow.com/questions/3156423/why-dont-we-use-void-in-main
重点在于,这里面所有有经验的工程师,无一例外地(从语言层面)反对main函数返回void。但我们强调:事实上有很多人反对这种设计,这也是有理由的。main函数的返回值会呈递操作系统,但操作系统本身底层也可能是C写的,那么操作系统终止时返回给谁?似乎没有这个必要。但除非您想要写裸机(Bare-Metal,也即没有操作系统和C标准库,直接操作硬件)程序,否则我认为没有反对这种设计的合理理由。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 单纯型python实现编译报错
- ¥15 c++2013读写oracle
- ¥15 c++ gmssl sm2验签demo
- ¥15 关于模的完全剩余系(关键词-数学方法)
- ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
- ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音