Impossible is nothing  
  爱过知情重醉过知酒浓   花开花谢终是空   缘份不停留像春风来又走   女人如花花似梦
公告
日历
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567
统计
  • 随笔 - 8
  • 文章 - 91
  • 评论 - 16
  • 引用 - 0

导航

常用链接

留言簿(4)

随笔分类(4)

随笔档案(8)

文章分类(77)

文章档案(91)

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 


关于 c 宏:

1.  预编译器将程序正文中将所遇到的宏名展开成宏定义。

#define PI 3.1415926

2.  可以定义带参数的宏,具有模板的部分功能,但是最好将宏参数用括号括起来。

#define MIN(a,b) (((a)<(b))?(a):(b))

3.  通过 ## 宏运算符可以拼接起两个串。

#define NAME a,b a##b

4.  #undef X 保证不再有称为 X 的有定义的宏。

5.  一种特殊的宏:条件编译。

#ifdef MACRO_NAME

… …

#endif

意思是:除非应经定义了名为 MACRO_NAME 的宏,否则 #ifdef #endif 之间的语句将被忽略。

 

C++ 中应该尽量避免使用宏:

1 #define PI 3.1415926 可以使用 const double PI=3.1415926 代替。

2 #define MIN(a,b) (((a)<(b))?(a):(b)) 可是使用函数模板代替。

template <class T>

inline T min(T a, T b)

{

       return (a<b)?a:b;

}

3. 用于拼接起两个串的宏和条件编译的宏仍然有其使用范围。

 

宏的优点:

1.  效率高,执行速度快。但是有的可以使用 C++ inline 函数代替,仍然保持其执行效率。

 

宏的缺点:

1 .缺乏类型安全检查和作用域规则检查,编译器能看到的只是宏展开后的形式,所以在宏中的错误是在宏被展开之后报告的,而不是在它定义时,导致非常难以理解的错误信息。

2 .宏名不能重载,而且宏预处理器不能处理递归调用
posted on 2006-03-29 22:18 笑笑生 阅读(127) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © 笑笑生 Powered by: 博客园 模板提供:沪江博客