首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

拜托不用再用system("pause")和void main了

2014-01-22 
拜托不要再用system(pause)和void main了1 : 不知道为何在CSDN上常看见有人宣告void main这东西不是C+

拜托不要再用system("pause")和void main了
1 : 
不知道为何在CSDN上常看见有人宣告"void main"
这东西不是C++的標準進入點
标准只支援两种宣告
第一种"int main"
第二种"int main(int argc, char *argv[])"
宣告"void main"可能会有非预期的结果
这点不只适用于C++,C也一样管用
这是教科书的错?或者是教授们的错?

2 :
不要用system("pause")来暂停,可以改用std::cin.get或getchar()
为何不要用system("pause")?
有两个理由
一 : 不具可移植性
二 : 这东西很贵

贵在那里?让我们来看看system("pause")的流程
1 : 暂停你的程式
2 : 在sub-process中启动OS
3 : 寻找要执行的命令并为之分配记忆体
4 : 等待输入
5 : 回收记忆体
6 : 结束OS
7 : 继续你的程式
[解决办法]

引用:
使用 CodeBlocks 没压力
C/C++ code
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}


输出
Assembly code
Hello world!

Process returned 0 (0x0)……

其实,VS里,也有类似的功能。
曾经,我同学也是用vs运行程序时,总是选在debug模式下的那个三角形的,但是程序一闪而过,结果,他就
采用像lz提供的方法, system("pause"); 或者用输入的阻塞 什么 getc(), getchar()什么的;
结果,他测试一个累的析构函数调用时,结果怎么也显示不出,析构函数的中打印的语句.
后来,我告诉的他,问题就是出现在那个system()或者getc(),调用上,其实类对象的析构发生在其后,只不过显示一闪而过所以看不到。

其实,在debug选项下有个 start without debugging。[img=http://my.csdn.net/wzb56/album/detail/1315808][/img]

工具没用好,带来的问题!


问题1:也是应当避免的,操作系统需要应用程序,有个返回码来确定,应用程序是否正常退出。
void main() : 返回一个不确定的值;
int main(int argc, char *argv[]) : 返回一个整形的退出码。
int main(int argc, char *argv[], char *env[]): 在linux系统编程时,用过,能够使用系统的环境变量。

在windows下,测试返回码:echo %errorlevel%
在Linux下, 测试返回码: echo $?

在进行,windows下批处理编程,或者Linux的shell脚本编程,这些应用程序的返回,决定着批处理程序或者shell脚本程序的执行流程。


热点排行