请问这段C语言是什么意思(关于POINTER_32的定义)

#if defined(_WIN64)
#define POINTER_32 _ptr32
#else
#define POINTER_32
#endif

这是。BaseTsh.h这个头文件里定义的
这句话我理然是如果是64为程序,那么POINTER_32就是一个32位的指针。
其它情况下……后面的语句我就读不懂了……肯请指点
书上说DEFINE一般都是这么使:
#define PI 3.1415926
如果只是:
#define POINTER_32
这是什么意思啊,不明白

以下内容节选自本人的文章《C++宏,预处理器,RTTI,typeid与强制类型转换专题》,你可以在本人的文库中下载到这篇文章,下面的代码是本人学习笔记,其中详细讲解了对于C++从C遗传下来的比较烦人的“宏”和"逻辑预处理器"问题。希望看过之后,你对“宏”和"逻辑预处理器"有个车底的了解。

3、 预处理器:预处理器是编译器把C++代码编译为机器指令之前执行的一个过程,所有的预处理器都是#开头,以便与C++语句区分开来,#include预处理器指令在前面已经用过不少了
3.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这里会是一个未定义的标识符。
3.2、从程序串删除#define定义的标志:在#define语句中,如果没有为标识符指定置换字符串,标识符就会被一个空的字符串来代替,也就是说标识符被删除了,比如#define PI表示在程序中该语句后面删除所有的PI标识符。
3.3、取消#define的定义:可以使用#undef来取消#define定义的标识符,比如#undef PI表示在#undef后面的语句中标识符PI的定义被取消了。
3.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。
3.5、#define可以引起的错误:比如#define f(m,n) m*n 如果有调用f(4+2, 3);则该语句会被转换为4+2*3这与我们所希望的(4+2)*3不一致,要解决这个问题就是给参数加上符号,比如#define f(m,n) (m)*(n)
3.6、怎样把预处理指令放在多行上:其方法为使用”\”续行符符号,该符号应在上一行的最后一个字符。
比如#define m \
kkielfml
3.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”

4、逻辑预处理器指令:
4.1、逻辑#if指令:该指令原理与条件语句if相同,如果测试为真就执行后面的语句,如果为假则跳过后面的语句。该指令有两种用法,其一可以用#if指令测试某个符号以前是否用#define指令定义过,这是最常用的用法,其二可以用来测试某个条件表达式是否为真。
4.2、#if指令用法一:测试某个符号是否以前用#define定义过,该用法的指令如下#if defined 标识符 …. #endif 其缩写形式为#ifdef 标识符….#endif表示如果,指定的标识符已被#define定义,则中间的语句就包含在源文件中,如果该标识符还未被#define定义,则跳过#if和#endif之间的语句,该语句以#endif结束,还要注意的是标识符前的关见字是defined比define多一个字母d。
4.3、测试标识符是否不存在:其语法为#if !defined 标识符…..#endif缩写形式为#ifnedf 标识符…..#endif表示如果指定的标识符没有定义,则把#if和#endif之间的语句包含在源文件中,如果标识符已定义则跳过#if和#endif之间的代码,实标上#ifndef语句比#ifdef语句使用得更频繁,因为系统使用该语句防止头文件被多次包含,
4.4、防止头文件被包含多次的方:其方法为#ifndef HY #define HY语句#endif程序在开始遇到标识符HY时没有被定义,这时执行后面的语句,再第二次被使用时则标识符HY已经被定义,这时不会执行后面的语句,从而防止了同一头文件被包含多次的情况。这里要注意使用#define后面定义的标识符不需要值。
4.5、#if语句还可以使用逻辑运算符以测试多个值,比如#if defined HY1&&HY2….#endif当HY1与HY2都为真时才执行,同样还可以使用其他逻辑运算符。
4.6、#if指令用法二:测试某个表达式的值是否为真,其语法格式为:#if 常量表达式….#endif,注意常量表达式的求值结果应是整数常量表达式,比如#if a=2 …. #endif测试a的值是否为2,如果为2则执行#if与#endif之间的语句。
4.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则执行该条件后的语句。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-22
其实这个很好理解啊!!
它是用预处理来达到定义的目的
如果系统是64位的,
那就定义 POINTER_32 _ptr32
否则定义 POINTER_32
这个标志会在后面的程序中用到!!!
第2个回答  2010-02-22
这样理解比较通俗,如果系统是64位的,那就定义 POINTER_32 _ptr32
否则定义 POINTER_32
第3个回答  2012-05-30
这是甚麼鬼满意解答,根本是废材

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网