设为首页 加入收藏

TOP

C语言 条件编译详解(二)
2013-04-10 11:20:51 来源: 作者: 【 】 浏览:1006
Tags:语言   条件 编译 详解

 

  3.#运算符

  出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串。有时把这种用法的#称为字符串化运算符。例如:

  #define PASTE(n) "adhfkj"#n

  main()

  {

  printf("%s\n",PASTE(15));

  }

  宏定义中的#运算符告诉预处理程序,把源代码中任何传递给该宏的参数转换成一个字符串。所以输出应该是adhfkj15.

  4.##运算符

  ##运算符用于把参数连接到一起。预处理程序把出现在##两侧的参数合并成一个符号。看下面的例子:

  #define NUM(a,b,c) a##b##c

  #define STR(a,b,c) a##b##c

  main()

  {

  printf("%d\n",NUM(1,2,3));

  printf("%s\n",STR("aa","bb","cc"));

  }

  最后程序的输出为:

  123

  aabbcc

  千万别担心,除非需要或者宏的用法恰好和手头的工作相关,否则很少有程序员会知道##运算符。绝大多数程序员从来没用过它。

  三、条件编译指令

  条件编译指令将决定那些代码被编译,而哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。

  1.#if指令

  #if指令检测跟在制造另关键字后的常量表达式。如果表达式为真,则编译后面的代码,知道出现#else、#elif或#endif为止;否则就不编译。

  2.#endif指令

  #endif用于终止#if预处理指令。

  #define DEBUG 0

  main()

  {

  #if DEBUG

  printf("Debugging\n");

  #endif

  printf("Running\n");

  }

  由于程序定义DEBUG宏代表0,所以#if条件为假,不编译后面的代码直到#endif,所以程序直接输出Running.

  如果去掉#define语句,效果是一样的。

  3.#ifdef和#ifndef

  #define DEBUG

  main()

  {

  #ifdef DEBUG

  printf("yes\n");

  #endif

  #ifndef DEBUG

  printf("no\n");

  #endif

  }

  #if defined等价于#ifdef; #if !defined等价于#ifndef

  4.#else指令

  #else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后面的代码。#endif指令将中指上面的条件块。

  #define DEBUG

  main()

  {

  #ifdef DEBUG

  printf("Debugging\n");

  #else

  printf("Not debugging\n");

  #endif

  printf("Running\n");

  }

  5.#elif指令

  #elif预处理指令综合了#else和#if指令的作用。

  #define TWO

  main()

  {

  #ifdef ONE

  printf("1\n");

  #elif defined TWO

  printf("2\n");

  #else

  printf("3\n");

  #endif

  }

  程序很好理解,最后输出结果是2.

  6.其他一些标准指令

  #error指令将使编译器显示一条错误信息,然后停止编译。

  #line指令可以改变编译器用来指出警告和错误信息的文件号和行号。

  #pragma指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。

      

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C中随机读写文件 下一篇C语言位操作

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: