c:初始化新typedef'的宏;d对象
我定义了一个新类型:c:初始化新typedef'的宏;d对象,c,macros,typedef,C,Macros,Typedef,我定义了一个新类型: #define MAX_ELEM 10 typedef struct my_type { int v[MAX_ELEM]; } my_type; 现在,当我声明这种类型的新对象时,我想将其初始化为默认值: my_type m = MY_TYPE_INIT(); 我可以有这样的东西: #define MY_TYPE_INIT(m) \ do { \ int i; for (i = 0; i < MAX_ELEM; i++) \
#define MAX_ELEM 10
typedef struct my_type {
int v[MAX_ELEM];
} my_type;
现在,当我声明这种类型的新对象时,我想将其初始化为默认值:
my_type m = MY_TYPE_INIT();
我可以有这样的东西:
#define MY_TYPE_INIT(m) \
do { \
int i;
for (i = 0; i < MAX_ELEM; i++) \
m->v[i] = -1;
} while (0)
#define MY_TYPE_INIT(m) \
do { \
int i;
for (i = 0; i < MAX_ELEM; i++) \
m->v[i] = -1;
} while (0)
#定义我的类型_INIT(m)\
做{\
int i;
对于(i=0;iv[i]=-1;
}而(0)
但是我想以我之前展示的方式进行初始化,通过将值直接分配给my_type
类型的对象。有可能吗?
谢谢
我可以有这样的东西:
#define MY_TYPE_INIT(m) \
do { \
int i;
for (i = 0; i < MAX_ELEM; i++) \
m->v[i] = -1;
} while (0)
#define MY_TYPE_INIT(m) \
do { \
int i;
for (i = 0; i < MAX_ELEM; i++) \
m->v[i] = -1;
} while (0)
或编写初始化函数:
void init_my_type(my_type *mt) {
for (int i = 0; i < MAX_ELEM; i++) {
m->v[i] = -1;
}
}
// ...
my_type mt;
// Note: must be inside a function:
init_my_type(&mt);
void init_my_type(my_type*mt){
对于(int i=0;iv[i]=-1;
}
}
// ...
my_型mt;
//注意:必须位于函数内部:
初始化我的类型(&mt);
我可以有这样的东西:
#define MY_TYPE_INIT(m) \
do { \
int i;
for (i = 0; i < MAX_ELEM; i++) \
m->v[i] = -1;
} while (0)
#define MY_TYPE_INIT(m) \
do { \
int i;
for (i = 0; i < MAX_ELEM; i++) \
m->v[i] = -1;
} while (0)
或编写初始化函数:
void init_my_type(my_type *mt) {
for (int i = 0; i < MAX_ELEM; i++) {
m->v[i] = -1;
}
}
// ...
my_type mt;
// Note: must be inside a function:
init_my_type(&mt);
void init_my_type(my_type*mt){
对于(int i=0;iv[i]=-1;
}
}
// ...
my_型mt;
//注意:必须位于函数内部:
初始化我的类型(&mt);
有什么不使用函数的理由吗?@ChristianGibbons,我以前在Linux内核和其他地方见过这种技巧,但记不起细节。我认为从API用户的角度来看,这种方式(我想要的)是直接和直观的。我错了吗?#定义我的_TYPE_INIT{-1,-1,-1,-1,-1,-1,-1}
和我的_TYPE m=我的_TYPE_INIT如果你需要一个循环,使用一个函数。你可能会看到类似于pthread\u mutex\u t mutex=pthread\u mutex\u初始化器
如果您的默认值只是0
而不是-1
,那么这会更干净。你就不能改变索引在这些值上的使用方式吗?有什么理由不使用函数吗?@ChristianGibbons,我以前在Linux内核和其他地方见过这种技巧,但记不起细节。我认为从API用户的角度来看,这种方式(我想要的)是直接和直观的。我错了吗?#定义我的_TYPE_INIT{-1,-1,-1,-1,-1,-1,-1}
和我的_TYPE m=我的_TYPE_INIT如果你需要一个循环,使用一个函数。你可能会看到类似于pthread\u mutex\u t mutex=pthread\u mutex\u初始化器
如果您的默认值只是0
而不是-1
,那么这会更干净。你不能改变索引在这些值上的使用方式吗?