拜托不用再用system("pause")和void main了
拜托不要再用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 : 继续你的程式
[解决办法]
其实,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脚本程序的执行流程。