C/C++ 宏中“#"和"##”的常见用法
来源:互联网 发布:平面设计和美工的区别 编辑:程序博客网 时间:2024/05/21 12:40
一般用法
通常情况我们一般把宏#参数变为一个字符串,形如:123--->”123”,当然这种转换方法很多譬如:itoa,sprintf等函数都可以完成,但是如果频繁的调用这些系统调用的话,会造成较大的系统开销,使用宏#不失为一种高效便捷的手段,
用##把两个宏参数贴合在一起.
简单的方法。
#include<stdio.h>
#define STR(s) #s
#define CONS(x,y) (int)(x##e##y)
int main()
{
printf("%s\n",STR(123));
Printf(“%d\n”,CONS(3,3));
return 0;
}
--------下面是执行结果
./a.out
123
3000
'#'和'##'的一些应用特例
1. 合并匿名变量名
#define ___ANONYMOUS1(type, var, line) type var##line
#define __ANONYMOUS0(type, line) ___ANONYMOUS1(type, _anonymous, line)
#define ANONYMOUS(type) __ANONYMOUS0(type, __LINE__)
例:
ANONYMOUS(static int); 即: static int _anonymous70; 70表示该行行号;
第一层:ANONYMOUS(static int); --> __ANONYMOUS0(static int, __LINE__);
第二层: --> ___ANONYMOUS1(static int, _anonymous, 70);
第三层: --> static int _anonymous70;
即每次只能解开当前层的宏,所以__LINE__在第二层才能被解开;
2. 填充结构
#define FILL(a) {a, #a}
enum IDD{OPEN, CLOSE};
typedef struct MSG{
IDD id;
const char * msg;
}MSG;
MSG _msg[] = {FILL(OPEN), FILL(CLOSE)};
相当于:
MSG _msg[] = {{OPEN, "OPEN"},
{CLOSE, "CLOSE"}};
3. 记录文件名
#define _GET_FILE_NAME(f) #f
#define GET_FILE_NAME(f) _GET_FILE_NAME(f)
static char FILE_NAME[] = GET_FILE_NAME(__FILE__);
4. 个人文库地址:
http://wenku.baidu.com/p/helpylee
- C/C++ 宏中“#"和"##”的常见用法
- [c、c++]宏中"#"和"##"的用法
- [c、c++]宏中"#"和"##"的用法
- C/C++ 宏中“#"和"##”的用法
- C语言中const 的常见用法
- c/c++ 宏中"#"和"##"的用法
- [转]C宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- c/c++ 宏中"#"和"##"的用法
- c/c++ 宏中"#"和"##"的用法
- C语言:宏中"#"和"##"的用法
- c/c++ 宏中"#"和"##"的用法
- c/c++ 宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- 15分钟的效率法则
- 结构化P2P网络——DHT网络原理
- 2、Objective-C语法之字符串NSString
- Cordova Android源码分析系列二(CordovaWebView相关类分析)
- 计算机类专业毕业生五年程序员职业生涯的回顾和思考
- C/C++ 宏中“#"和"##”的常见用法
- 基于Linux环境Tomcat-MySQL的服务器搭建
- iOS Icon图标尺寸
- 3、Objective-C语法之类和对象
- windows 监听命令
- Windows7下JDK+Tomcat的安装与配置
- html/css入门第一篇
- ruby简单的基础
- 抽象类,接口,多态的综合运用