词条 | C语言逻辑预处理器 |
释义 | 1、 预处理器:预处理器是编译器把C++代码编译为机器指令之前执行的一个过程,所有的预处理器都是#开头,以便与C++语句区分开来,#include预处理器指令在前面已经用过不少了 1.1、#define指令:该指令用于符号置换,其格式为#define 标识符 字符序列。注意该语句不以分号结束。比如#define PI 3.1416就表示把PI置换为3.1416,这里要注意的是虽然PI看起来和变量一样,但PI和变量没有任何关系,PI只是一个符号或标志,在程序代码编译前该符号会用一组指定的字符来代替。还要注意的是3.1416并不是一个数值,而是一个字符串,因此不会进行类型检查。在C++中最好是用const来声名常量,比如const long double PI=3.1416;这样的话PI将会始终保持为long double类型。语句中的字符序列可以是任意的字符序列,而不仅仅是数字,比如#define PI HYONG这样的话在使用PI使就会用HYONG来替换掉PI,当然HYONG这里会是一个未定义的标识符。 1.2、从程序串删除#define定义的标志:在#define语句中,如果没有为标识符指定置换字符串,标识符就会被一个空的字符串来代替,也就是说标识符被删除了,比如#define PI表示在程序中该语句后面删除所有的PI标识符。 1.3、取消#define的定义:可以使用#undef来取消#define定义的标识符,比如#undef PI表示在#undef后面的语句中标识符PI的定义被取消了。 1.4、带参数的#define:其格式为#define 标识符(参数列表) 置换字符串。比如#define f(v) cout<<(v)<<endl;表示将f(v)用后面的字符串替换,其中的参数v也可以进行替换,比如在程序中可以这样调用f(3);就会把程序转换为cout<<(3)<<endl;结果程序输出3,注意这里的括号不会被输出。参数列表也可以有多个参数,参数间用逗号隔开即可,比如#define f(m,n) cout<<(m)<<(n)<<endl;如果有调用f(3,4);程序转换为cout<<(3)<<(4)<<endl;输出34。 1.5、#define可以引起的错误:比如#define f(m,n) m*n 如果有调用f(4+2, 3);则该语句会被转换为4+2*3这与我们所希望的(4+2)*3不一致,要解决这个问题就是给参数加上符号,比如#define f(m,n) (m)*(n) 1.6、怎样把预处理指令放在多行上:其方法为使用”\\”续行符符号,该符号应在上一行的最后一个字符。 比如#define m \\ kkielfml 1.7、#define使用字符串作为参数:比如#define m “kdi”如果有语句cout<<m;则会输出字符串kdi,但要注意,不能这样做#define m dki cout<<”m”;不能在标志符前加上双引号以试图输出字符串dki,这样只会输出字符串m,因为程序会把”m”解释为一个字符串,而不会把它解释为cout<<”dki”。 3.8、#define把参数指定为字符串:其方法是在参数前加上符号”#”,比如#define f(m) cout<<#m 如果这时有f(dikl);则程序将会转换为cout<<”dikl”,最后输出字符串dikl。这里要注意的是该方法只能用于参数,而不能用于其他地方,比如#define m #kidkl这样就是错误的,这里试图用m来代替字符串”kidkl”,这是不成功的,正确方法为#define m “kidkl” 2、逻辑预处理器指令: 2.1、逻辑#if指令:该指令原理与条件语句if相同,如果测试为真就执行后面的语句,如果为假则跳过后面的语句。该指令有两种用法,其一可以用#if指令测试某个符号以前是否用#define指令定义过,这是最常用的用法,其二可以用来测试某个条件表达式是否为真。 2.2、#if指令用法一:测试某个符号是否以前用#define定义过,该用法的指令如下#if defined 标识符 …. #endif 其缩写形式为#ifdef 标识符….#endif表示如果,指定的标识符已被#define定义,则中间的语句就包含在源文件中,如果该标识符还未被#define定义,则跳过#if和#endif之间的语句,该语句以#endif结束,还要注意的是标识符前的关见字是defined比define多一个字母d。 2.3、测试标识符是否不存在:其语法为#if !defined 标识符…..#endif缩写形式为#ifnedf 标识符…..#endif表示如果指定的标识符没有定义,则把#if和#endif之间的语句包含在源文件中,如果标识符已定义则跳过#if和#endif之间的代码,实标上#ifndef语句比#ifdef语句使用得更频繁,因为系统使用该语句防止头文件被多次包含, 2.4、防止头文件被包含多次的方:其方法为#ifndef HY #define HY语句#endif程序在开始遇到标识符HY时没有被定义,这时执行后面的语句,再第二次被使用时则标识符HY已经被定义,这时不会执行后面的语句,从而防止了同一头文件被包含多次的情况。这里要注意使用#define后面定义的标识符不需要值。 2.5、#if语句还可以使用逻辑运算符以测试多个值,比如#if defined HY1&&HY2….#endif当HY1与HY2都为真时才执行,同样还可以使用其他逻辑运算符。 2.6、#if指令用法二:测试某个表达式的值是否为真,其语法格式为:#if 常量表达式….#endif,注意常量表达式的求值结果应是整数常量表达式,比如#if a=2 …. #endif测试a的值是否为2,如果为2则执行#if与#endif之间的语句。 2.7、多个#if选择块:和常规的if语句一样#if也有对应的#else和#elif语句,比如#if a=3 …. #else …. #endif表示如果a=3则执行if后面且在#else前面的语句,如果为假则执行#else与#endif间的语句。#elif用来实现多个选择,该语句和常规语句的else if相似,比如#if a=1 …. #elif a=2 …. #elif a=3…. #else …. #endif表示,如果a=1则执行#if后的语句,如果a=2则执行该条件后的语句。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。