#define Fbw(f) f ## _fbw() C语言中的 ##是什么意思

作者:fly 发布于:2014-5-10 11:08 分类:嵌入式

#ifdef FBW
#include "firmwares/fixedwing/main_fbw.h"
#define Fbw(f) f ## _fbw()
#else
#define Fbw(f)
#endif

//AP  
#ifdef AP
#include "firmwares/fixedwing/main_ap.h"
#define Ap(f) f ## _ap()
#else
#define Ap(f)
#endif

int main( void ) {
  Fbw(init);
  Ap(init);

 

以上代码片段取自PPZ飞控源代码

最后的含义Fbw即如果定义使用FBW,则执行函数init_fbw();如果没有定义使用,则此处没有执行任何东西。

 

另外类似的还有

#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x

x##y表示什么?表示x连接y,举例说:
int  n = Conn(123,456);  结果就是n=123456;
char* str = Conn("asdf", "adf")结果就是 str = "asdfadf";
怎么样,很神奇吧

再来看#@x,其实就是给x加上单引号,结果返回是一个const char。举例说:
char a = ToChar(1);结果就是a='1';
做个越界试验char a = ToChar(123);结果是a='3';
但是如果你的参数超过四个字符,编译器就给给你报错了!error C2015: too many characters in constant   :P

最后看看#x,估计你也明白了,他是给x加双引号
char* str = ToString(123132);就成了str="123132";

文章出自www.forwhat.cn

发表评论:

 
Powered by emlog sitemap