![21天学通C++(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/312/31186312/b_31186312.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
6.5 其他命令
前面介绍了预处理程序的许多命令,如宏定义、包含文件和条件编译等。除此之外,预处理程序还支持其他一些命令,这在本章一开始就列出了,本节将简要介绍其中的几个命令。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt008_61.jpg?sign=1739345006-zU26Z3CveaQIWsLacuH0mYFdiug56Shz-0-94d5266640cc1cf5441ebeecdef2cb13)
6.5.1 #error命令
在C++中,预处理程序中的#error指令用于程序的调试,在编译中遇到#error指令就停止编译。其一般形式如下:
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt008_62.jpg?sign=1739345006-0oC1ygeeznNq07GZrzTDJ9mrrnZ89XlE-0-bb21a24c62206438b6c0fba33c4a431e)
需要注意的是,上述形式中的出错信息是不加引号的,当编译器遇到这个指令时,显示错误信息并停止编译。
C++提供#error命令的目的是保证程序是按照用户所设想的那样进行编译的。系统编译程序时,只要遇到#error就会跳出一个编译错误,用户就可以知道程序是否正常执行。例如,程序中往往有很多的预处理指令:
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt008_63.jpg?sign=1739345006-KRZeJ409GXNAgcwfAWEaUSlXi4MBH49B-0-e1d0d6fed71362308d86d29698b3b406)
当程序比较大时,往往有些宏定义是在外部指定的,或是在系统头文件中指定的,当用户不太确定当前是否定义了某一个宏时,就可以改成如下这样进行编译:
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt008_64.jpg?sign=1739345006-FBtQHenRHkPO9rSk39bOpgo7ED8zDg9r-0-9c34884019a5016ae301b196aa1f46ef)
这样,如果编译时出现错误,输出了XXX has been defined的错误提示,那就表明宏XXX已经被定义了。
6.5.2 #line命令
#line命令用于控制行号,其一般在发布错误和警告信息时使用。当用户在编译一段程序的时候,如果有错误发生,编译器会在错误前面显示出错文件的名称及文件中的第几行发生错误。指令#line可以实现这个功能,也就是说,当出错时显示文件中的行数及希望显示的文件名。该命令的格式是:
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt008_65.jpg?sign=1739345006-8Nt957a9omIMokOrKbrqTNxlt2col2Uz-0-083bb19e9ad474f89f8cfa1966f82b68)
此处的number是将会赋给下一行的新行数,其后面的行数从这一点逐个递增。filename是一个可选参数,用来替换自此行以后出错时显示的文件名,直到有另外一个#line指令替换它或直到文件的末尾。例如:
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt008_66.jpg?sign=1739345006-UMJnvrcfco4rpnNrh469s376eBNAHIW8-0-1bcf91d98bff02134bd0e4eb560ce305)
这段代码将会产生一个错误,显示为在文件"assigning variable",line 1。