合理并灵活使用---宏定义
来源:互联网 发布:苹果播放器哪个好 知乎 编辑:程序博客网 时间:2023/12/03 10:16
利用宏定义动态构造变量
在c/c++中利用宏预定义是非常好的选择,特别是加上##,功能更加强大。 看例子先:
#include "stdio.h"
#define convar(head , index) head##index
int main()
{
int a1 = 3 ;
convar(a , 1) = 4;
printf("%d" , a1);
scanf("%d" , a1);
return 0 ;
}
利用define 和 ## 可以连接两个符号,动态形成变量。
把符号转化为字符串的宏技巧
这个技巧使用到一个特殊的宏:#
#的作用是给其后的参数添加一对双引号。
运行一下下面的例子代码:
#define Enum2Str(e) #e
enum VALUE{ ONE ,TWO ,THREE };
void test(VALUE v);
void main()
{
test(ONE);
}
void test(VALUE v)
{
switch(v)
{
case ONE: cout << Enum2Str(ONE) << endl;break;
case TWO: cout << Enum2Str(TWO) << endl;break;
case THREE: cout << Enum2Str(THREE) << endl;break;
}
}
看了结果之后,相信你对这个宏有了初步的认识,事实上,它可以把任意的符号转化为字符串,也就是说,你不仅可以用来输出enum值,而且可以用来输出函数名,变量名等。
很容易想到的一个用途就是用来做log或者用以输出调试信息。
这里提供一个简单的例子:
#define Symbol2Str(s) #s
//利用OutputDebugString输出调试信息:
#define MyCase(e) case e: OutputDebugString("VALUE is "); /
OutputDebugString(Symbol2Str(e) ); /
OutputDebugString("/n")
//改写上面的例子
enum VALUE{ ONE ,TWO ,THREE };
void test(VALUE v);
void main()
{
test(ONE);
}
void test(VALUE v)
{
switch(v)
{
MyCase(ONE);break;
MyCase(TWO);break;
MyCase(THREE);break;
}
}
注意,为了使用OutputDebugString,你必须包含windows.h
到此为止,相信你已经可以用这个宏为自己的log或者调试信息的输出搭建一个简洁方便的平台了。
- 合理并灵活使用---宏定义
- 【C++】灵活使用C/C++宏定义
- 透彻理解异常并合理使用异常
- 软件面试题-灵活
- ios 灵活使用宏
- 定义并使用变量
- 一种合理而灵活的DL布局
- 切图崽的自我修养-如何合理组织CSS
- 使用宏灵活的控制代码
- 灵活定义首页页号
- WPF-样式的定义和使用
- 合理使用索引
- 合理使用下拉列表
- 合理使用namespace
- 合理使用mysql索引
- 如何合理使用虚拟内存
- C# 合理使用ToolTip
- hashmap的合理使用
- (转帖)小菜编程成长记(九 反射——程序员的快乐!)
- WaitForSingleObject
- 在非MFC程序中引用CString
- XMLHttpRequest对象
- 基于对话框的程序关闭不了解答
- 合理并灵活使用---宏定义
- Zigbee无线传感器网络平台的设计与实现
- Setprecision
- ARM7——LPC2xxx小总结
- (转帖)小菜编程成长记(十 会修电脑不会修收音机?——聊设计模式原则)
- 为对话框中的控件增加提示的简单方法
- maven入门--概念与实例
- MFC学习(读MFC深入浅出)
- (转帖)小菜编程成长记(十一 三层架构,分层开发)