主题三 编译过程介绍----20.#和##运算符的使用分析
来源:互联网 发布:anywhere软件源 编辑:程序博客网 时间:2024/06/05 19:45
#运算符用于在预编译期将宏参数转换为字符串
#include<stdio.h>#define CONVERS(x) #xint main(){ printf(“%s\n”,CONVERS(Hello Word!)); printf(“%s\n”,CONVERS(while)); printf(“%s\n”,CONVERS(return)); retrun 0;}//输出:while,return//通过中间文件,发现预编译后,printf函数中被替换成字符串了。
//#运算符的妙用#include <stdio.h>#define CALL(f, p) (printf("Call function %s\n", #f), f(p)) int square(int n){ return n * n;}int f(int x){ return x;}int main(){ printf("1. %d\n", CALL(square, 4)); printf("2. %d\n", CALL(f, 10)); return 0;}//Output:// Call function aquare
// 1. 16// Call funtion f// 2. 10
##运算符用于在预编译期粘连两个符号
#include <stdio.h>#define NAME(n) name##nint main(){ int NAME(1); int NAME(2); NAME(1) = 1; NAME(2) = 2; printf("%d\n", NAME(1)); printf("%d\n", NAME(2)); return 0;}
//##运算符在定义结构体的妙用#include <stdio.h>#define STRUCT(type) typedef struct _tag_##type type;\struct _tag_##typeSTRUCT(Student){ char* name; int id;};int main(){ Student s1; Student 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;}
阅读全文
0 0
- 主题三 编译过程介绍----20.#和##运算符的使用分析
- 主题三 编译过程介绍----17.条件编译的使用分析
- 主题三 编译过程介绍----19#pragma的分析与使用
- 主题三 编译过程介绍---- 16.宏定义与使用分析
- 主题三 编译过程介绍----18.#error和#line
- 主题三 编译过程介绍---- 15.编译过程简介
- 主题:js运算符“||”和“&&”的妙用
- 三目运算符的简单介绍
- Android教程 -08 ToolBar的使用和主题的介绍
- 三目运算符"?:"的透彻分析
- 本文介绍在VC 6.0中编译和使用OpenSSL的过程
- 关于运算符(三目运算符)和运算过程中的优先关系
- 双目运算符和三目运算符的使用浅谈
- log4cxx 的编译安装过程和使用
- 3.5、#和##运算符使用分析
- iperf的介绍、交叉编译和使用
- 编译原理(八) 算符优先分析法(分析过程的算法和C++实现)
- 编译原理(八) 算符优先分析法(分析过程的算法和C++实现)
- 如何调试分析Android中发生的tombstone
- Mysql日志解析
- GNU C
- 【C++】学习笔记五十二——友元
- 贝叶斯决策 实例
- 主题三 编译过程介绍----20.#和##运算符的使用分析
- HDU2433 Travel 最短路径树
- Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
- web支付
- eclipse最有用快捷键整理
- DataSnap
- MySql binlog日志详解
- VS2010 调试C++项目 fatal error LNK1123 错误解决办法 ,为什么会这样
- 安卓神器tasker