C语言#与##运算符的使用
来源:互联网 发布:淘宝会员有什么用 编辑:程序博客网 时间:2024/05/17 03:30
#与##运算符的使用
1.#运算符
- 作用:进行字符串的转换
- 作用域:只能在宏定义中使用
- 示例:
#define fun(x) #x //将x转化成为字符串//逗号表达式是从左往右进行计算#define CALL(f, p) (printf("Call function %s\n", #f), f(p))int square(int n){ return n * n;}int f1(int x){ return x;}int main(){ //对上面的宏进行测试 printf("%s\n", fun(hello world!)); printf("%s\n", fun(100)); printf("%s\n", fun(while)); //可以使用系统的命名 printf("%s\n", fun(return)); putchar(10); printf("%d\n", CALL(square, 4)); printf("%d\n", CALL(f1, 10)); return 0;}
- 使用
gcc -E filename.c -o filename.i
进行查看编译过程
int square(int n){ return n * n;}int f1(int x){ return x;}int main(){ printf("%s\n", "hello world!"); printf("%s\n", "100"); printf("%s\n", "while"); printf("%s\n", "return"); putchar(10); printf("%d\n", (printf("Call function %s\n", "square"), square(4))); printf("%d\n", (printf("Call function %s\n", "f1"), f1(10))); return 0;}
- 注:上面的程序的要求使用函数无法实现(#只能在宏定义中使用),使用宏以及#可以很好的达到目的
2.##运算符
- 作用:在预编译期粘连两个符号
- 作用域:只能在宏定义中使用
- 示例:
#define NAME(n) name##n//对于结构体的定义且重命名以简化使用#if 0typedef struct TEST{ int i; int j;}test;//typedef TEST test;#endif//用宏定义来执行上述操作,可以简化操作且更普遍的适用#define STRUCT(type) typedef struct TEST##type type;\struct TEST##typeSTRUCT(student){ char *name; int id;};int main(){ int NAME(1); int NAME(2); NAME(1) = 1; NAME(2) = 2; printf("%d\n", NAME(1)); printf("%d\n", NAME(2)); putchar(10); student s1, s2; s1.name = "s1"; s1.id = 0; s2.name = "s2"; s2.id = 1; printf("%s\n", s1.name); printf("%d\n", s1.id); printf("%s\n", s2.name); printf("%d\n", s2.id); return 0;}
- 使用
gcc -E filename.c -o filename.i
进行查看编译过程
typedef struct TESTstudent student;struct TESTstudent{ char *name; int id;};//可以在任何时候对结构体进行重命名,只要结构体被定义完成int main(){ int name1; int name2; name1 = 1; name2 = 2; printf("%d\n", name1); printf("%d\n", name2); putchar(10); student s1, s2; s1.name = "s1"; s1.id = 0; s2.name = "s2"; s2.id = 1; printf("%s\n", s1.name); printf("%d\n", s1.id); printf("%s\n", s2.name); printf("%d\n", s2.id); return 0;}
阅读全文
2 0
- C语言#与##运算符的使用
- C语言一些运算符的使用
- C语言位运算符的使用
- 学好C语言的运算顺序与运算符
- c语言“->”运算符和“.”运算符的使用简介
- c语言位运算符与逻辑运算符的区别
- 说说C语言运算符的“优先级”与“结合性”
- C语言运算符的优先级与结合性
- 说说C语言运算符的“优先级”与“结合性”
- c语言的按位或,与,非运算符
- C语言运算符的优先级与结合性
- 黑马程序员--c语言运算符的概念与分类
- 关于C语言的"[]"运算符与指针
- 说说C语言运算符的“优先级”与“结合性”
- c语言运算符与表达式的优先级
- 【基础知识】C语言与C++的运算符
- c语言的数算据类型、运算符与表达式
- C语言的运算符
- Android Home键之后启动Activity延迟5秒
- html5的download
- 让你一看就明白的binder机制
- T通过代码创建、读取文件
- 用VisualGDB在vs2013在linux服务器上编译代码的3073问题
- C语言#与##运算符的使用
- mac上安装jdk
- Spring MVC之@RequestMapping 详解
- 使用 Flume 收集数据
- linux常用命令
- 排序算法关系图
- S5PV210系列(裸机五)之关看门狗、设置栈、开iCache
- pl/sql使用教程
- 图文讲解jenkins的安装与配置---远程发布、自动监测代码更新