C语言 函数默认参数
2016-04-30 14:40
375 查看
这段代码也不知道谁是原创了,知道的话告诉我链接
#define DEFARG(name, defval) ((#name[0]) ? (name + 0 ) : defval)
在这里#name[0]中#的作用是把后面的参数转换为字符串,并且[0]取出字符串中的第一个元素
如果name为空格,则#name为”“空字符串,#name[0]为’\0’,表达式为假,此时表达式的值为defval
还有一个疑问为什么是name+0,直接name不可以吗?
当name为空格时,(name+0)就是+0,也就是0
如果是((#name[0]) ? (name ) : defval),当name为空格时,那么最后就好比(a >b) ? : b缺少了一部分,自然是错的
C语言宏定义技巧(常用宏定义)
C语言宏定义中的#,##,#@及\符号的作用
C语言宏高级用法 [总结]
20个C语言中常用宏定义总结
C语言中的参数默认值
宏定义的黑魔法 - 宏菜鸟起飞手册
C语言宏的特殊用法和几个坑
#include <stdio.h> #define DEFARG(name, defval) ((#name[0]) ? (name + 0 ) : defval) int _f1(int i) { return 2 * i; } #define f1(arg0) _f1(DEFARG(arg0, 0)) int _f2(int i, int j) { return i + j; } #define f2(arg0, arg1) _f2(DEFARG(arg0, 0), DEFARG(arg1, 1)) int main() { printf("%d\n", f1()); printf("%d\n", f1(1)); printf("%d\n", f2(, )); printf("%d\n", f2(2, )); printf("%d\n", f2(, 3)); printf("%d\n", f2(4, 5)); return 0; }
#define DEFARG(name, defval) ((#name[0]) ? (name + 0 ) : defval)
在这里#name[0]中#的作用是把后面的参数转换为字符串,并且[0]取出字符串中的第一个元素
如果name为空格,则#name为”“空字符串,#name[0]为’\0’,表达式为假,此时表达式的值为defval
还有一个疑问为什么是name+0,直接name不可以吗?
当name为空格时,(name+0)就是+0,也就是0
如果是((#name[0]) ? (name ) : defval),当name为空格时,那么最后就好比(a >b) ? : b缺少了一部分,自然是错的
C语言宏定义技巧(常用宏定义)
C语言宏定义中的#,##,#@及\符号的作用
C语言宏高级用法 [总结]
20个C语言中常用宏定义总结
C语言中的参数默认值
宏定义的黑魔法 - 宏菜鸟起飞手册
C语言宏的特殊用法和几个坑
相关文章推荐
- C++中的friend关键字
- hdoj1014
- c++ primer笔记------智能指针
- MFC excel修改类
- C语言写的简单的单向链表
- C++中类访问权限控制
- 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
- Boost Test学习总结(C++)
- C++单元测试:boost.test
- 谈谈C++中的类存储模型
- C++异常处理
- 【转】C语言的位运算的优势
- 同一个C语言工程不同C文件之间的函数互相调用问题(二)
- 对C++中mutable、inline、volatile关键字的理解
- 同一个C语言工程不同C文件之间的函数互相调用问题(一)
- c++ operator的学习
- 模拟实现C语言中的字符串函数
- 图解Win7下安装Borland C++ 3.1失败记
- UE4:C++中使用材质
- CDHtmlDialog的基本使用(C++调用JS函数的实现)