Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c:初始化新typedef'的宏;d对象_C_Macros_Typedef - Fatal编程技术网

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_INITpthread\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_INITpthread\u mutex\u t mutex=pthread\u mutex\u初始化器
如果您的默认值只是
0
而不是
-1
,那么这会更干净。你不能改变索引在这些值上的使用方式吗?