【学习笔记】宏定义基础
2015-05-19 19:42
239 查看
在C/C++中,宏定义是由define完成的。
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
f(1,2) 输出:12 输出格式为%d ,若为%s则报错
g(f(1,2)) 输出:f(1,2) 输出格式%s
h(f(1,2)) 输出:12 输出格式%s
最外层宏可替换至最内层再转换,中间层则马上被转换。
define中有三个特殊的符号值得我们注意:
1. #:在宏展开的时候会将#后面的参数替换成字符串,如:
#define p(str) printf(#str);
调用p(this is test)的时候会将#exp换成"this is test"
2. ##:将前后两个的单词拼接在一起。例如:
#define cat(x,y) x##y
调用cat(test,123)展开后成为test123.
3. #@:将值序列变为一个字符
#define ch(c) #@c
调用ch(a)展开后成为'a'.
例:
#define A(x) T_##x
#define B(x) #@x
#define C(x) #x
x=1
替换为:
A(1)------> T_1 (T_##x,##符号是记号粘黏符号,将前后的字符粘黏起来。)
B(1)------> '1' ( #@x , #@ 符号会将宏的参数进行字符串字面量化,并且加‘’号)
C(1)------> "1" ( #x ,#符号会将宏的参数进行字符串字面量化,并且加""号)
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
f(1,2) 输出:12 输出格式为%d ,若为%s则报错
g(f(1,2)) 输出:f(1,2) 输出格式%s
h(f(1,2)) 输出:12 输出格式%s
最外层宏可替换至最内层再转换,中间层则马上被转换。
define中有三个特殊的符号值得我们注意:
1. #:在宏展开的时候会将#后面的参数替换成字符串,如:
#define p(str) printf(#str);
调用p(this is test)的时候会将#exp换成"this is test"
2. ##:将前后两个的单词拼接在一起。例如:
#define cat(x,y) x##y
调用cat(test,123)展开后成为test123.
3. #@:将值序列变为一个字符
#define ch(c) #@c
调用ch(a)展开后成为'a'.
例:
#define A(x) T_##x
#define B(x) #@x
#define C(x) #x
x=1
替换为:
A(1)------> T_1 (T_##x,##符号是记号粘黏符号,将前后的字符粘黏起来。)
B(1)------> '1' ( #@x , #@ 符号会将宏的参数进行字符串字面量化,并且加‘’号)
C(1)------> "1" ( #x ,#符号会将宏的参数进行字符串字面量化,并且加""号)
相关文章推荐
- 宏定义-C语言基础学习笔记
- 【java学习笔记】反射基础
- (C/C++ 学习笔记)函数指针语法基础
- Vijava 学习笔记之VirtualMachine(基础配置信息{VirtualMachineConfigSummary})
- 【零基础入门学习Python笔记013】元祖:戴上了枷锁的列表
- Python-基础学习笔记(二)
- 零基础入门学习Python学习笔记第六讲【元组】
- Jquery基础学习笔记(2)-文档处理
- C++/GDI+ 学习笔记(三)——基础
- ios学习笔记--(oc基础4)
- EL运算符(web基础学习笔记十七)
- Jquery 基础学习笔记
- Python基础函数学习笔记(一)
- AS3.0基础学习笔记(3): 认识类结构
- Python基础教程 第4章: 字典 学习笔记
- 基础知识 第一部分 算法导论 学习笔记
- 网络编程4--毕向东java基础教程视频学习笔记
- python基础教程_学习笔记15:标准库:一些最爱——fileinput
- JAVASCRIPT学习笔记基础(二)
- ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法