序:
为了重新扎扎实实地再深入学习一遍C++,我选择了C++ Primer这本经典。又开了这个系列的随笔,用于记录学习过程中遇到的一些有趣的问题和心得。同时,也是想通过写随笔的方式督促自己不断进步,争取成为一名精通C++编程技巧和编程思想的好程序猿O(∩_∩)O嗯!
正文:
这两天将C++ Primer的第一章抽时间看完了,阅读过程中,遇到几个有趣的问题,值得记录:
一、用Windows命令行编译自己的c或者cpp
网上有大把的这个问题的教程,总结下来,大同小异。尽管不同的vs(vc)版本一些细节处有不同,以vs2010为例,分以下几步:
1.将vs 2010的/vc/bin加入到path中
2.cmd启动
3.vcvars32.bat设置环境为使用vs2010 X86工具
4.cl /Ehsc XXXX.cpp编译(直接cl亦可)
5.直接调用XXXX.exe运行即可
网上教程一大堆,但我在操作时遇到了几个有意思的问题:
1.刚开始我用vs2015,但在vs2015的/vc/bin中没有cl.exe程序,所以上述方法不适用。我自己鼓捣了老半天也没找到解决的方法,最后放弃vs2015,使用了vs2010。
2.在操作过程中,出现一个有趣的错误:在cmd中键入cl编译(或lib)时会出现mspdb100.dll无法找到的情况。原来这是因为VC\Bin\下没有mspdb100.dll“这个文件,直接从Common7\IDE\下复制这个文件到VC\Bin\下即可。
二、如何观察main返回的错误标识
Windows 7操作系统并不处理或报告程序返回的错误标识,直观上,返回-1的程序和返回0的程序在执行效果上并无不同。要想查看,一个可行的方法是在控制台窗口执行完程序后紧接着一个echo %ERRORLEVEL%命令。(ERRORLEVEL记录了上一个程序的返回值)
三、cerr、cout、clog的区别
1.cout输出的信息可以重定向,而cerr只能输出到标准输出(显示器)上。
2.cerr不经过缓冲区,直接向显示器输出信息,而cout和clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出。
3.cerr和clog均关联到标准错误,但cerr通常写入到与标准输出相同的设备,clog通常写入到一个日志文件中。
4.cerr通常用于输出错误信息或其他不属于正常逻辑的输出内容,clog通常用于报告程序的执行信息。
四、文件结束符
windows中的文件结束符是Ctrl+Z,unix中的是Ctrl+D,然后按Enter或Return。
五、缓冲区
I/O通常将输入输出的数据保存在一个缓冲区,读写缓冲区的动作与程序中的动作无关。默认情况下,读cin会刷新cout,程序非正常终止也会刷新cout。