Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65882
  • 博文数量: 26
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-05 15:21
文章分类
文章存档

2013年(3)

2012年(23)

我的朋友

分类:

2012-04-19 09:33:00

【本文摘自】:       
       作者:清林,博客名:飞空静渡;

#if语句

#if语句会计算它后面的表达式,并检查表达式的结果,如果结果为真(true),就编译后面的语句,如果为假(false),就不编译后面的语句。

例如:

      #if COUNT
      char *desc = "The count is non-zero";
      #endif


只有COUNT不为0的情况下才会编译

char *desc = "The count is non-zero";

语句。

下面是#if后面的表达式的一些语法规则:

1)表达式可以包括整形常量和宏,这个宏必须是被赋值过(区别被定义过)

2)可以使用圆括号来指定表达式的顺序。

3)表达式中可以包含C语言中的+,-,*,/,<<和>>算术运行符。这些算术运算使用当前平台的整型的最大表示的值来运算,一般为64位的整型值。

4)表达式也可以包括<,>,<=,>=和==比较运行符。

5)表达式可以包括&&和||逻辑运算符。

6)非(!)运算符可以反转表达式的结果,如:#if !(LIMXP > 12)

      如果LIMXP > 12,那么表达式的结果就为假

7)#if也可以和defined语句一起使用,这样可以检查某一个宏是否被定义过(也可以直接使用#ifdef)。如:

     #if defined(MINXP)

     意思是如果MINXP被定义过,那么表达式就为真。也可以在前面加一个非(!)运算符来取反的结果,如:

     #if !defined(MINXP)

     意思是如果MINXP没有被定义过,那么表达式就为真。

8)一个标识符如果没有被定义过,那它的值总是为0,-Wundef选项可以用来产生这个警告信息。

9)有参数的宏(gcc:预处理语句--#define、#error和#warning )在表达式中也是零值,-Wundef选项可以用来产生这个警告信息。

10)#else提供另外的选择,如:

#if MINTXT <= 5
#define MINTLOG 11
#else
#define MINTLOG 14
#endif
11)#elif可以提供一个或多个的选择表达式,如:

#if MINTXT <= 5
#define MINTLOG 11
#elif MINTXT == 6
#define MINTLOG 12
#elif MINTXT == 7
#define MINTLOG 13
#else
#define MINTLOG 14
#endif

 

#ifdef

在跟#ifdef后面同一行的宏如果被定义过的话,那么#ifdef后面的语句块将会被编译,这个语句块以#endif结束。例如:

#ifdef MINTARRAY
int xarray[20];
#endif /* MINTARRAY */

 

#endif后面的注释语句并不是必须的/* MINTARRAY */,但确实一个好的管用法,这样就可以知道是你定义的哪个宏的结束位置。

和#ifdef意思想反的就是#ifndef了。

更多请参考GCC手册。

阅读(4781) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~