下载此文档

C语言中如何使用宏.doc


文档分类:IT计算机 | 页数:约4页 举报非法文档有奖
1/4
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/4 下载此文档
文档列表 文档介绍
C 珍惜生活——上帝还让你活着,就肯定有他的安排。雷锋做了好事不留名,但是每一件事情都记到日记里面。 C 语言中如何使用宏 C(和 C++ ) 中的宏( Macro ) 属于编译器预处理的范畴, 属于编译期概念( 而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。宏使用中的常见的基础问题# 符号和## 符号的使用... 符号的使用宏的解释方法我们能碰到的宏的使用宏使用中的陷阱常见的基础性问题关于#和## 在C 语言的宏中, # 的功能是将其后面的宏参数进行字符串化操作( Stringfication ) ,简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏: #define WARN_IF(EXP) \ do{ if (EXP) \ fprintf(stderr, "Warning: " #EXP "\n"); }\ while(0) 那么实际使用中会出现下面所示的替换过程: WARN_IF (divider == 0); 被替换为 do{ if (divider == 0) fprintf(stderr, "Warning" "divider == 0" "\n"); } while(0); 这样每次 divider (除数)为 0 的时候便会在标准错误流上输出一个提示信息。而## 被称为连接符( concatenator ), 用来将两个 Token 连接为一个 Token 。注意这里连接的对象是 Token 就行,而不一定是宏的变量。比如你要做一个菜单项命令名和函数指针组成的结构体的数组,并且希望在函数名和菜单项命令名之间有直观的、名字上的关系。那么下面的代码就非常实用: mand { char * name; void (*function) (void); }; #MAND(NAME) { NAME, NAME ## _command } // mand 结构的数组了: mands[] ={ COMMAND(quit), COMMAND(help), ... } COMMAND 宏在这里充当一个代码生成器的作用,这样可以在一定程度上减少代码密度,间接地也可以减少不留心所造成的错误。我们还可以 n个## 符号连接 n+1 个 Token ,这个特性也是# 符号所不具备的。比如: #define LINK_MULTIPLE(a,b,c,d) a##_##b##_##c##_##d typedef struct _record_type LINK_MULTIPLE(pany,position,salary); // 这里这个语句将展开为: // typedef struct _record_type pany_position_salary; 关于... 的使用... 在C 宏中称为 Variadic Macro ,也就是变参宏。比如: #define myprintf(templt,...) fprintf(stderr,templt,__VA_ARGS__) // 或者#define myprintf(templt,args...) fprintf(stderr,templt,args) 第一个宏中由于没有对变参起名, 我们用默认的宏__VA_ARGS__ 来替代它。第二个宏

C语言中如何使用宏 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数4
  • 收藏数0 收藏
  • 顶次数0
  • 上传人sw1dvv67
  • 文件大小103 KB
  • 时间2017-05-17