c语言常用到的几个冷知识
来源:互联网 发布:unity 2d优化视频 编辑:程序博客网 时间:2024/06/06 12:36
c语言常用到的几个冷知识
一,宏定义中的特殊参数(#、##、...和__VA_ARGS__)
1,“#”这个特殊的宏定义参数也特别有用.#作为一个预处理运算符,它可以把语言符号字符串化(stringizing).例如我们定义的变量等.简单的说就是把定义值变成字符串,常用于打印;
#define StringInt(x) #x
int test()
{
printf("test int is %s\n",StringInt(2));
}
运行结果:test int is 2
2,##运算符可以用于类函数宏的替换部分.##还可以用于类对象宏的替换部分.这个运算符可以把两个语言符号组合成单个语言符号
#define MYNAME(n) "I am##n"
int test()
{
printf("test string: %s\n",MYNAME(gchen));
}
运行结果:test string:I an gchen
定义自动产生数组
#define BEGIN_MAP(name) \
static const int name## _entrys[][] = \
{
#define CONVERT_EVENT(num) \
{ \
num\
},
#define END_MAP(name) \
{ \
0\
} \
}; \
3 __VA_ARGS__参数部分 应该为 要替换为的部分的变量,只能代替后面的参数.
#define CHECK1(x, ...) if (!(x)) { printf(__VA_ARGS__); }
#define CHECK2(x, ...) if ((x)) { printf(__VA_ARGS__); }
#define CHECK3(...) { printf(__VA_ARGS__); }
#define MACRO(s, ...) printf(s, __VA_ARGS__)
int main() {
CHECK1(0, "here %s %s %s", "are", "some", "varargs1(1)\n");
CHECK1(1, "here %s %s %s", "are", "some", "varargs1(2)\n"); // won't print
CHECK2(0, "here %s %s %s", "are", "some", "varargs2(3)\n"); // won't print
CHECK2(1, "here %s %s %s", "are", "some", "varargs2(4)\n");
// always invokes printf in the macro
CHECK3("here %s %s %s", "are", "some", "varargs3(5)\n");
MACRO("hello, world\n");
// MACRO("error\n", EMPTY); would cause C2059
}
错误的用法:
#define W(x,...,y)
- c语言常用到的几个冷知识
- C语言的几个常见冷知识
- C语言的几个知识
- 几个常用C语言函数的分析
- C语言常用的几个算法
- C语言几个常用的函数
- 有关大数据,你不一定知道的几个冷知识
- c语言学习中遇到的几个关键知识
- C语言 关于补码的几个小知识
- 几个常用C语言函数
- 2017年度科技冷知识,有几个把你雷到?
- C/C++语言宏的冷知识,内置宏,__FILE__,__LINE__,##, 可变参的宏...和__VA_ARGS__
- C/C++语言宏的冷知识,内置宏,__FILE__,__LINE__,##, 可变参的宏...和__VA_ARGS__
- 开发软件常用到的几个最基本技能(RUBY 语言描述)。
- c语言常用知识1
- C语言常用知识积累
- C语言文件常用到的宏
- c语言中常常用到的宏
- spring data 分页查询
- 大数据正式8
- 如何生成一个合适的hashcode方法
- Java.lang.String中个别小技巧
- 简单动画系统随笔
- c语言常用到的几个冷知识
- java 生成复杂xml格式数据
- 7大绝招帮你轻轻松松提升 MySQL 性能
- 表单提交验证
- JDK8,CentOS7安装
- 循环删除list集合元素
- ubuntu17.04安装lamp
- ionic toggle 切换开关
- vector容器的使用