C语言malloc创建struct同时初始化成员变量
来源:互联网 发布:黄金投资 知乎 编辑:程序博客网 时间:2024/06/07 21:48
写过C程序都知道,malloc了新的struct之后,经常跟着一大串的赋值\初始化语句。其实这些可以用一行漂亮的代码搞定。
先上代码:
#define new(type, ...) ({\ type* __t = (type*) malloc(sizeof(type));\ *__t = (type){__VA_ARGS__};\ __t; })
使用示例:
struct S { union { int x, y; }; enum {AA, BB} e;};int main() { struct S *s1 = new(struct S); struct S *s2 = new(struct S, 12); struct S *s3 = new(struct S, 12, BB); struct S *s4 = new(struct S, .e = BB, .x = 12);}
这段代码仅在GCC里work,因为用到了GCC的一个扩展特性,加了括号的block(({ })
)可以带有返回值,即最后一个语句的返回值。
还用到了C99的一个feature,就是那个非常酷炫的.field =
的赋值。
另外三个点的宏定义,看例子就差不多明白了吧。
Ref.
http://stackoverflow.com/questions/2679182/have-macro-return-a-value
http://stackoverflow.com/questions/3016107/what-is-tagged-structure-initialization-syntax
http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html
0 0
- C语言malloc创建struct同时初始化成员变量
- [C++]C++语言类成员变量初始化总结
- c语言 struct 的初始化
- c语言变量初始化
- C语言中 struct成员变量顺序对内存的占用
- C语言中 struct 成员对齐
- C++语言类成员变量初始化总结
- c语言struct的一种初始化方法
- C语言变量的初始化
- C语言之变量初始化
- C语言变量的初始化
- C 语言笔记;变量初始化
- c语言变量赋值,初始化
- struct成员变量
- 初始化 struct 变量
- c语言结构体指针成员初始化
- Go语言struct的创建与初始化、函数调用
- C struct 成员冒号
- zoj3329 One Person Game(期望dp)
- cocoapods安装使用
- C++模板(4) - 模板元编程
- libgdx robovm admob IOS SDK的绑定
- 计算长方形或正方形的周长和面积
- C语言malloc创建struct同时初始化成员变量
- C++模板(5) - 模板特化
- MySQL-分区表-0
- mysql启动错误1067的解决
- 算数运算符与算术表达式
- C++局部类
- AFNetworking-源码解析
- qt设置无窗体圆角窗口
- hdu4405 Aeroplane chess(期望dp)