![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
古风流
喜欢做菜的程序员,有点懒,不爱赖床
展开
-
__attribute__ 用法
最近在看项目代码的时候发现了新大陆,之前从没有用过__attribute__,根据代码和网上看到的资料,总结一下 __attribute__ 的常用用法~1.__attribute__((packed))取消结构体对齐。 用例:typedef struct __attribute__((packed)){UBYTE sts;}ST_USB_POWER_RES;原创 2017-07-20 11:37:55 · 699 阅读 · 0 评论 -
va_start应用
C语言调用函数传递参数的时候通过栈实现,参数从右向左入栈,所以通过指针取得首参数的地址么然后根据每个参数的类型长度进行指针跳转就可以指向后续的参数。对于以上处理,C语言有一组宏对应实现:如:printf(const char* fmt, ...)va_list ap;va_start(ap, fmt); // ap 指向变长参数的第一个原创 2017-07-20 17:50:38 · 1641 阅读 · 0 评论 -
宏定义追加do{ }while(0)的原因
代码里面经常遇见宏定义里面追加 do{ } while(0);的情况查了下资料总结了一下,认为主要原因有两个1:防止空定义宏,代码编译不过。2:防止二义例:#define NS_FUNC() func1(); \func 2();上面函数在执行以下处理的时候 。会出错,错误明显,func 2()必然执行~if (exp)原创 2017-07-21 11:32:33 · 384 阅读 · 0 评论