让我轻轻地打开VS,选择“文件”--“打开”--“项目/解决方案”:
在弹出的打开项目对话框中选择最简单实用的工程“Z.sln”(如没有该工程,请先快速学习《建立一个最简单实用的C++项目》。实在不想看也没关系,不影响下面的学习),点击“打开”。
工程被打开,主窗口自动展开“Z.cpp”代码文件(上次关闭工程时打开的文件)
(1)注释
观察一下“Z.cpp”里前两行的内容:
//Z.cpp:定义控制台应用程序的入口点。
//
这两行是C++语法里的“注释”,即给程序员(自己或其他同事)看的内容,可以写点文件说明、功能说明、编程心得等等。就像空格、Tab符,编译器实际编译时是忽略它的。
C++支持两种注释符号,第一种是双斜线(“//”),可用来注释一个单行,右边的内容都会被编译器忽略。这是最实用的方式。
小止说一个VS小技巧:选中几行代码,点击工具条上的“注释选中行”按钮,然后会发现,这几行代码会自动被“//”注释起来。如果再点击“注释选中行”按钮右边的“取消对选中行的注释”按钮,则这几行代码又会自动被取消注释。是不是很方便实用?
另一种是注释对(“/*”和“*/”),这是C语言唯一支持的注释语法,在C++中并不常用。编译器会无视/*与*/之间的代码,这个可以跨越空格、Tab符、换行,所以一个注释对可以支持注释多行代码。
C++PrimerPlus第6版中文版(异步图书出品)京东月销量好评率98%无理由退换京东配送¥59购买(2)预处理器指示符
观察一下“Z.cpp”里第4行和第5行的内容:
#includestdafx.h
#includeiostream
这两行有个共同的特点,首先都是“#”开头。井号“#”就是所谓的预处理器指示符,它表示该行代码是给预处理器用的,也就是编译前的预先处理过程,一般是用于代码自动展开、代码替换、编译设置等用途。
其中最最最实用的,就是这个“#include”语法了。它指示编译前由预处理器自动读入指定文件的内容。
#includestdafx.h代表在工程目录下找到名为“stdafx.h”的文件,并在这一行将其内容自动展开。
#includeiostream代表在预定义目录(这是VS自动设置的目录,可在工程设置里查看或修改)找到名为“iostream”的文件,并在这一行将其内容自动展开。
观察一下“stdafx.h”的内容
看到这行代码#pragmaonce
这行预处理的含义是用来防止编译器多次展开同一个头文件。编译器多次展开同一个头文件,会出现代码行重复,可能导致编译时报“重复定义”错误。这行预处理也是很实用的,在VS工程的每个头文件的第一个有效代码行都能看到,是标准配置。
其它的预处理命令还有“#define”、“#ifdef”、“#ifndef”、“#endif”等等,这些目前已不常用。我们写代码时可以完全不用。但有些老代码或者库文件代码里有绕不过去,比如我们在“Z.cpp”里查看一下“_tmain”函数的定义:
#define_tmainwmain
#define_tmainmain
为什么有两个,这是因为Windows程序的字符集编码方式有两种,Unicode字符集和多字节字符集(也是常说的ANSI字符集,我们常用的GBK编码就属于多字节字符集)。VS会根据工程设置自动将“_tmain”替换为“wmain”(Unicode)或“main”(多字节)。故“#define”常用于名称或变量替换。
其它的含义和使用方式可以遇到了再去MSDN上查阅。
学习目标“最简单实用的注释和预处理器指示符介绍”已完成[再见]