Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64010
  • 博文数量: 15
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 107
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-18 21:26
文章分类

全部博文(15)

文章存档

2013年(15)

我的朋友

分类: C/C++

2013-05-20 10:17:23

在源码中我们经常使用如下方法来使用ifdef预处理指令:

#ifdef A
   helloWorld();
#endif

实际上可以使用如下方法来做预处理,在A未定义的时候,使得helloWorld()函数实现为空。

#ifdef A
void  helloWorld()
{

}

#else
void helloWorld()
{
 printf("helloWorld").
}
#endif

这样在任何情况下都可以调用helloWorld了。
阅读(1617) | 评论(4) | 转发(0) |
0

上一篇:没有了

下一篇:如何判断CPU是big-endian还是little-endian

给主人留下些什么吧!~~

leizisdu2013-05-28 22:36:50

caniggiagoal:你这么写是传统的做法。我写这个的目的是基于现在碰到的问题提出的,现在有两个版本合入到了一起,但是只有一个版本需要调用这个函数,而且是大量调用。如果按照传统的办法来的话,就需要在每次函数调用前面都写一个判断下是A版本还是B版本。看起来很是野蛮。

看来各有优缺点

回复 | 举报

caniggiagoal2013-05-23 14:10:42

relipmoc:#ifdef A
   void helloWorld()
   {
      printf("helloWorld");
   }
#endif
...
#ifdef A
   helloWorld();
#endif
个人觉得这种方法更好,原因:
1 在A没定义时不用定义helloWorld()函数,减少了程序编译后的尺寸。实际上#if...#endif主要目的就是这个,不然有if语句就够了。
2 更早发现错误。如果没定义helloWorld(),去调用了,编译时就会报错。而第2种方法把这种错误掩盖了,要到运行时才能暴露,代价更大。

你这么写是传统的做法。我写这个的目的是基于现在碰到的问题提出的,现在有两个版本合入到了一起,但是只有一个版本需要调用这个函数,而且是大量调用。如果按照传统的办法来的话,就需要在每次函数调用前面都写一个判断下是A版本还是B版本。看起来很是野蛮。

回复 | 举报

relipmoc2013-05-21 09:59:46

#ifdef A
   void helloWorld()
   {
      printf("helloWorld");
   }
#endif
...
#ifdef A
   helloWorld();
#endif
个人觉得这种方法更好,原因:
1 在A没定义时不用定义helloWorld()函数,减少了程序编译后的尺寸。实际上#if...#endif主要目的就是这个,不然有if语句就够了。
2 更早发现错误。如果没定义helloWorld(),去调用了,编译时就会报错。而第2种方法把这种错误掩盖了,要到运行时才能暴露,代价更大。