
C语言
weidaocc
这个作者很懒,什么都没留下…
展开
-
【】C语言】【预处理命令】#、##、##__VA_ARGS_、##args_
将宏参数转换为字符串,即将参数名转换为字符串字面值。运算符将可变参数列表与前面的标记连接起来,从而避免这种情况.:用于连接两个符号,将它们组合成一个符号。则用于在宏定义中处理可变参数列表的边界情况。用于将可变参数列表作为一个整体传递给宏。当可变参数列表为空时,如果直接使用。gcc 宏##args用法。原创 2023-08-28 16:00:21 · 368 阅读 · 0 评论 -
【结构体】【初始化】【{0}、{}】进阶
为结构体每个成员初始化成0Reference C99 Standard 6.7.8.21:If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate,or fewer characters in a string literal used to initialize an array of known size than there are原创 2020-12-09 16:30:41 · 7901 阅读 · 1 评论 -
【宏】【宏与const区别】
解读:(1)编译器处理方式不同 define宏是在预处理阶段展开。 const常量是编译运行阶段使用。(2)类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开。 const常量有具体的类型,在编译阶段会执行类型检查。(3)存储方式不同 define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。(宏定义不分配内存,变量定义分配内存。) const常量会在内存中分配(可以是堆中也可以是栈中)。...原创 2020-12-08 20:56:06 · 351 阅读 · 0 评论 -
【类型】【最大值最小值】【计算】
unsigned类型最大值:(your type)~0int类型最大值:(unsigned int)~0 为unsigned int类型最大值(二进制位全为1),右移1位即为int类型最大值int类型最小值:等于int类型最大值 + 1static const int MAX_INT = (int) ((unsigned int)~0 >> 1);static const int MIN_INT = (int) ((unsigned int)~0 >> 1) +...原创 2020-12-08 16:47:35 · 790 阅读 · 0 评论 -
【宏】【DEBUG宏】
https://www.cnblogs.com/PengfeiSong/p/6274834.htmldebug宏的实现原理(1)DEBUG宏大概的原理是:#ifdef DEBUG#define dbg() printf()#else#define dbg()#endif(2)工作方式是:如果我们要输出DEBUG版本则在条件编译语句前加上#define DEBUG即可,这样程序中的调试语句dbg()就会被替换成printf从而输出;如果我们要输出RELEASE版本则去掉#defin原创 2020-12-08 11:03:33 · 1275 阅读 · 0 评论 -
(void) (&_x == &_y) 作用
#define max(x,y) ({ \typeof(x) _x = (x);\typeof(y) _y = (y);\(void) (&_x == &_y);\_x > _y ? _x : _y; })typeof(x)的意思是取x的类型,这不是标准C里的,gcc支持,vc不支持(void) (&_x == &_...转载 2019-09-24 14:49:49 · 863 阅读 · 0 评论 -
宏#,##,##__VA_ARGS__
之前相应了解#define和inline的区别,以及各自的优缺点(下篇文章再好好总结一下吧)。但被effective C++的作者的一句话,尽量少用宏(万恶之源)所惑,多少有些忽视了#define的特性。下面所转载的东西,第7条看的多少有些迷糊外,其他6点还总结的非常好。参考如下:众多C++书籍都忠告我们C语言宏是万恶之首,但事情总不如我们想象的那么坏,就如同goto一样。宏有一个很大的...转载 2019-09-24 14:58:51 · 509 阅读 · 0 评论