C++中一些未定义的宏是什么意思?
比如:near和far是#definenear和#definefar,我在看一些头文件的时候看到的,但是它什么都没有定义,我不知道是什么意思,有谁能帮忙解释一下?谢谢...
比如:near和far是# define near 和# define far,我在看一些头文件的时候看到的,但是它什么都没有定义,我不知道是什么意思,有谁能帮忙解释一下?谢谢
展开
3个回答
展开全部
一般这些未定义宏可以作为一些代码上的注释。
例如#define IN 和 #define OUT
定以后,你可以声明函数function(IN int a, OUT int &b);可以在不影响函数的情况下,直观显示那个是传入参数,哪个是传出参数。
另外的未定义宏可以用来防止重复定义。
如:某头文件定义代码有:
#ifdef TTTTT
#defin TTTTT
function();
#endif
这样当在工程里,该头文件被连续包含两次的时候,第二次包含不会再次定义function();而导致出现重定义的问题。
如果你的程序需要同时兼容32位和64位或者其他不同的平台。
那么也可以在程序中最初始时根据不同的环境定义一个宏,例如64位下#define SYSX64
这样如果代码中某些地方环境不同需要采用不同的方法是,可以通过#ifdef SYSX64区分
例如#define IN 和 #define OUT
定以后,你可以声明函数function(IN int a, OUT int &b);可以在不影响函数的情况下,直观显示那个是传入参数,哪个是传出参数。
另外的未定义宏可以用来防止重复定义。
如:某头文件定义代码有:
#ifdef TTTTT
#defin TTTTT
function();
#endif
这样当在工程里,该头文件被连续包含两次的时候,第二次包含不会再次定义function();而导致出现重定义的问题。
如果你的程序需要同时兼容32位和64位或者其他不同的平台。
那么也可以在程序中最初始时根据不同的环境定义一个宏,例如64位下#define SYSX64
这样如果代码中某些地方环境不同需要采用不同的方法是,可以通过#ifdef SYSX64区分
展开全部
编译器预处理用的,只是告诉编译器,至两个宏定义过。就像头文件中都要进行宏判断,,如果定义过就不在编译,如果没定义过就编译,#ifdef_CMATH_H;#define _CMATH_H;.................#endif
追问
完全不能理解。。。。。。。
追答
#ifdef _CMATH_H
#define _CMATH_H
代码》》
代码》》
代码》》
代码》》
.#endif
这里编译器编译到这里会进行判断,如果_CMATH_H已经宏定义过了,就跳过中间的代码,如果没有宏定义过,就定义宏,编译中间的代码。为了同一段代码只能编译一次,比如头文件,在多个文件中引用,蛋只变异了一次。就是预处理的结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种就是方便人阅读的。near和far我不太知道,给你举个常用的:IN,OUT
void func (IN int a, OUT int *b)
{
*b = a;
}
这里就是方便人阅读,让人一目了然,a是输入参数,b是输出参数的。
这里的near和far也都是一样的作用,你结合实际意义揣度一下就行了。
void func (IN int a, OUT int *b)
{
*b = a;
}
这里就是方便人阅读,让人一目了然,a是输入参数,b是输出参数的。
这里的near和far也都是一样的作用,你结合实际意义揣度一下就行了。
追问
是不是一些未定义的宏就是方便阅读,没有实际含义
void func(IN int a,OUT int b)
void func(int a,int b)//a为输入,b为输出
两者可以替换吗?
追答
两者可以替换。
还有一种情况就是dfdglei说的那种,用#define XXX来定义编译的代码段。比如:
#ifdef XXX //如果定义了XXX
//code segment 1
#elif //如果没有定义XXX
//code segment 2
#endif
此时你如果#define XXX,也就是说“定义了XXX"(关于#define XXX你就可以把它理解为定义了XXX为”空“,”空“也是一种定义),那么code segment 1段起左右,否则code segment 2段起作用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询