C宏定义#和##的用法
2015-07-22 14:50
435 查看
1、#是用来把变量名转换为字符串的,例如:
#define print(val) printf(#val"=%d\n", val)
int main()
{
int a = 14;
print(a);
return 0;
}通过预编译:gcc -E test.c -o test.i
得到结果:
int main()
{
int a = 14;
printf("a""=%d\n", a);
return 0;
}其作用相当于为输入值添加了一对双引号。
2、##用于连接字符,例如
#define NAME(no) name_##no
int main()
{
int NAME(1) = 1;
int NAME(2) = 2;
int NAME(3) = 3;
return 0;
}
通过预编译:gcc -E test.c -o test.i
得到结果:
(1)此处的no不能为加引号的字符串,否则会提示无效的预处理符号。
(2)而是存在宏嵌套的情况,如下:
#define ONE 1
#define TWO 2
#define NAME(no) name_##no
int main()
{
int NAME(ONE) = 1;
int NAME(TWO) = 2;
return 0;
}对应预处理结果:
#define ONE 1
#define TWO 2
#define _NAME(no) name_##no
#define NAME(no) _NAME(no)
int main()
{
int NAME(ONE) = 1;
int NAME(TWO) = 2;
return 0;
}结果如下:
int main()
{
int name_1 = 1;
int name_2 = 2;
return 0;
}符合预期。
#define print(val) printf(#val"=%d\n", val)
int main()
{
int a = 14;
print(a);
return 0;
}通过预编译:gcc -E test.c -o test.i
得到结果:
int main()
{
int a = 14;
printf("a""=%d\n", a);
return 0;
}其作用相当于为输入值添加了一对双引号。
2、##用于连接字符,例如
#define NAME(no) name_##no
int main()
{
int NAME(1) = 1;
int NAME(2) = 2;
int NAME(3) = 3;
return 0;
}
通过预编译:gcc -E test.c -o test.i
得到结果:
int main() { int name_1 = 1; int name_2 = 2; int name_3 = 3; return 0; }需要注意的有两点:
(1)此处的no不能为加引号的字符串,否则会提示无效的预处理符号。
(2)而是存在宏嵌套的情况,如下:
#define ONE 1
#define TWO 2
#define NAME(no) name_##no
int main()
{
int NAME(ONE) = 1;
int NAME(TWO) = 2;
return 0;
}对应预处理结果:
int main() { int name_ONE = 1; int name_TWO = 2; return 0; }并不符合预期,处理方法是加一层宏定义:
#define ONE 1
#define TWO 2
#define _NAME(no) name_##no
#define NAME(no) _NAME(no)
int main()
{
int NAME(ONE) = 1;
int NAME(TWO) = 2;
return 0;
}结果如下:
int main()
{
int name_1 = 1;
int name_2 = 2;
return 0;
}符合预期。
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- C语言进制转换代码分享
- 基于C语言fflush()函数的使用详解
- C语言单链队列的表示与实现实例详解
- 关于C语言除0引发的思考
- 深入分析C中不安全的sprintf与strcpy
- Lua教程(四):在Lua中调用C语言、C++的函数
- C语言求幂计算的高效解法