C语言学习笔记--#和##操作符
1. #运算符
(1)#运算符用于在预处理期将宏的参数转换为字符串
(2)#的转换作用是在预处理期完成的,因此只在宏定义中有效,即其他地方不能用#运算符
(3)用法:#define STRING(x) #x
printf("%s\n",STRING(Hello World!));//注意,Hello World!不加引号!
#include <stdio.h>
#define STRING(x) #x
int main()
{
//注意宏参数不用加引号,#运算符在宏替换时会自动加上去
printf("%s\n",STRING(Hello World!)); //"Hello World!"
printf("%s\n",STRING()); //"100"
printf("%s\n",STRING(while)); //"while"
printf("%s\n",STRING(return)); //"return"
return ;
}
#运算符的妙用
#include <stdio.h>
//注意宏后面的为逗号表达式,返回的是第 1 个表达式的值
//该宏最大的用处在于,可以输出被调用的函数的名称
#define CALL(f,p) (printf("Call function %s\n",#f),f(p)) int square(int n)
{
return n*n;
} int func(int x)
{
return x;
} int main()
{
int iRet = ;
//将函数名称作用宏参数,利用#运算符将这个名称转为字符串输出
//同时,逗号表达式最后一个式子调用相应的函数
iRet = CALL(square,);
printf("result = %d\n",iRet);//输出函数名,并调用函数
iRet = CALL(func,);
printf("result = %d\n",iRet);//输出函数名,并调用函数
return ;
}
2. ##运算符
(1)##运算符用于在预处理期粘连两个标识符
(2)##的连接作用是在预处理期完成的,因此只在宏定义中有效。
(3)编译器不知道##的连接作用
(4)用法:
#define CONNECT(a,b) a##b
int CONNECT(a,1); //int a1;
a1 = 2;
#include <stdio.h>
#define NAME(n) name##n
int main()
{
int NAME(); //name1;
int NAME(); //name2;
NAME() = ; //name1 = 1;
NAME() = ; //name2 = 2;
printf("%d\n",NAME());
printf("%d\n",NAME());
return ;
}
##运算符的工程应用
#include <stdio.h>
//该宏可以方便定义结构体,并给结构体命名。
//省去每次在定义结构体时,都要重复地写上
//typedef struct ....之类的相同代码
#define STRUCT(type) \
typedef struct _tag_##type type;\
struct _tag_##type
//定义结构体,并命名为 Student
STRUCT(Student)
{
char* name;int id;
}; int main()
{
Student s1;
Student s2;
s1.name = "s1";
s1.id = ;
s2.name = "s2";
s2.id = ;
printf("s1.name = %s\n",s1.name);
printf("s1.id = %d\n",s1.id);
printf("s2.name = %s\n",s2.name);
printf("s2.id = %d\n",s2.id);
return ;
}
参考资料:
www.dt4sw.com
http://www.cnblogs.com/5iedu/category/804081.html
C语言学习笔记--#和##操作符的更多相关文章
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- Go语言学习笔记十一: 切片(slice)
Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
随机推荐
- 转:Android命令Monkey压力测试,详解
停止Monkey命令: 1. ps命令 查找uiautomator的进程 打开cmd命令行窗口 输入: adb shell ps | grep monkey 返回来的第一个数字,即是monkey的进 ...
- ZC_注意点
1. domain类 里面的 属性的类型,一般都是用 包装类 2. 使用 "Hibernate Reverse Engineering ..." 来进行自动生成domain类和?? ...
- Hbase- Hbase客户端读写数据时的路由流程
1.客户端先到zookeeper查找hbase:meta所在的RegionServer服务器 2.去hbase:meta表查找自己所要的数据所在的region server 3.去目标region s ...
- 批量反编译class文件
首先得进入jad的路径中,一般都放在jdk的安装目录的bin中 进入到该目录中,否则无法使用jad命令. jad -o -r -d F:\src -s java F:\classes\**\*.cla ...
- python3 列表属性
1.合并 >>> l1=[1,2,3,'e']>>> l2=['f',34,'feel']>>> l1+l2[1, 2, 3, 'e', 'f', ...
- 解决:Python爬取https站点时SNIMissingWarning和InsecurePlatformWarning
今天想利用Requests库爬取糗事百科站点,写了一个请求,却报错了: 后来参考kinsomy的博客,在cmd中pip install pyopenssl ndg-httpsclient pyasn1 ...
- 剑指offer--10.最小的K个数
边界判断,坑了一下 ----------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指数:375643 本题知识点: 数组 ...
- hdu-1863-畅通工程(kruskal算法模板)
题目链接 /* Name:hdu-1863-畅通工程 Copyright: Author: Date: 2018/4/18 10:19:03 Description: kruskal算法 */ #i ...
- XE7 - ListView自测笔记
这两天主要是摸索着使用了ListView和SQLite.郁闷过,也有收获. 一.SQLite 首先记录下SQLite自己碰到的几个小问题: 1. SQLite中字符串连接符是‘||’, 换行符为 x' ...
- 前端调错看ajax请求操作
---------------------------------------------------------------------------------------------------- ...