c/c++宏的使用总结

 

1 条件include

如下

CODE

 

#ifndef MAIN_H_

#define MAIN_H_

 

其它内容

 

#endif

 

上面在看到头文件时会看到 作用就是阻止这个头文件被多次include

多次include就会出现重复的定义情况 所以需要在每个头文件中都使用这个定义

 

如果还不是很了解要怎样使用 可以看看 c的标准头文件 如fcntl.h

 

 

 

 

2 条件编译

 

如下

CODE

 

#ifdef _DEBUG

printf("this debug info/n");

#endif

 

如果没有定义_DEBUG宏的话 那么上面那一行是不会编译进去的 

但是定义了_DEBUG后 上面那行就会编译进去 可以写个简单的程序测试

CODE

 

#include <stdio.h>

int main()

{

#ifdef _DEBUG

printf("hello world/n");

#else

printf("no debug");

#endif

return 0;

}

 

3 定义为某个值 以便后面修改这个值时不用修改其它地方代码 只要修改这个宏的定义就可以了 

 

如一个软件的多语言版本等 

 

如下

 

CODE

 

#include <stdio.h>

#define PRINT_STR "你好 DD"

main(){

printf(PRINT_STR);

return 0;

}

 

 

编译时 会把PRINT_STR代替成"你好 DD"

 

以后想修改时就方便了

 

 

另外也可以定义为函数

#include <stdio.h>

 

#ifdef _DEBUG

#define A(x) a(x)

#else

#define A(x) b(x)

#endif

 

int a(int x)

{

return x+1;

}

 

int b(int x){

return x+100;

}

 

int main(){

printf ("A(10) value is %d",A(10));

return 0;

}

[/code]

 

其实也可以定义成

#define A a

 

但是 定义成A(x)后 只有A后面带一个(x)类型的 编译器才会执行替换 比较安全 可以保证只替换函数而不替换变量

 

 

第四个
可变参数宏

有些时候定义一个宏来代替某个函数 但是这个函数是可变参数的话 那就需要考虑办法了

定义方法如下

CODE

#define PRINT(...) printf(__VA_ARGS__)
#include <stdio.h>
int main(){
PRINT("%d %s %s",1,"吃饭了吗 smile MM:)","/n");
return 0;
}







第五个 宏组合 

也就是## 和 #的用法
## 是连接符号 连接两个宏
#是把名字代替成字符串

如下

CODE

#define s5(a) supper_ ## a
#include <stdio.h>
void supper_printf(const char* p )
{
printf("this is supper printf:/n%s/n",a);
}

int main()
{
 s5(printf)("hello owrld");
 return 0;
}



#用法如下
#include <stdio.h>
#define s(p) #p
int main(){
printf(s(p)"/n");
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值