初始化C结构时的术语

这将是一个简单的问题,但用Google搜索似乎并没有给我提供答案。 我在C中理解它的方式有两种方法来初始化一个foo对象,当foo是一个结构时。 以下面的代码为例

typedef struct foo
{
   int var1;
   int var2;
   char* var3;
}foo;

//initializes and allocates a foo
foo* foo_init1(int v1,int v2,const char* v3)
{
   if(..some checks..)
      return 0;
   foo* ret = malloc(sizeof(foo));

   ret->var1 = v1;
   ret->var2 = v2;
   ret-var3 = malloc(strlen(v3)+1);
   strcpy(ret->var3,v3);

   return ret;
}

// initializes foo by ... what? How do we call this method of initialization?
char foo_init2(foo* ret,int v1,int v2, const char* v3)
{
   //do some checks and return false
    if(...some checks..)
         return false//;assume you defined true and false in a header file as 1 and 0 respectively
   ret->var1 = v1;
   ret->var1 = v1;
   ret->var2 = v2;
   ret-var3 = malloc(strlen(v3)+1);
   strcpy(ret->var3,v3);

   return true;
}

所以我的问题是这样的。 我们如何在C中引用这些不同的初始化方法? 第一个返回一个初始化指针给foo,所以如果你想在堆上使用foo对象,那么它很容易使用:

foo* f1 = foo_init1(10,20,"hello");

但第二个需要一个富...什么? 看看下面的代码。

foo f1;
foo_init2(&f1,10,20,"hello");

所以第二种方法可以很容易地在堆栈上初始化一个对象,但是如何调用它? 这基本上是我的问题,如何参考第二种初始化方法。

第一个分配并初始化一个指向foo的指针。 第二个初始化foo的是...什么? 参考?

作为一个额外的问题,在C编码时你们如何工作? 你是否确定了你正在制作的对象的用法,并决定你是否应该有类型1或2或者它们两者的初始化函数?


我不确定这两种方法是否有明确的术语,
在第一种方法中,函数动态分配一个结构并为成员赋值,
而在第二个结构被分配在函数和函数之前,然后只给成员赋值。

你是否确定了你正在制作的对象的用法,并决定你是否应该有类型1或2或者它们两者的初始化函数?

选择第一种或第二种方法取决于一个重要的区别:
第一种方法是当您需要将范围内的返回结构传递时,首选方法是将堆中的内存显式释放,直到第二种方法中数据占上风为止。一旦传递对象的范围结束,堆栈上的数据将被移除。


由于评论中没有人提出将他们的意见转化为答案的提议,我不得不回答我自己的问题。

基本上,一个可能的答案是,由于认可机构表示没有特定的命名约定。 当然,无论使用什么命名方法,它应该是:

  • 为了清楚起见,在所有项目中保持一致
  • 其他程序员可以将其识别为执行其实际操作的功能。
  • 为了达到这一点,评论中提出了一些很好的建议。 对于foo对象时:

  • 在函数foo_init中传递进行初始化
  • 在函数内部分配并返回一个指针:foo_alloc,foo_make,foo_new
  • 以上所有内容都很明确,但我认为最准确地描述函数中发生的事情是foo_init和foo_alloc。

    个人而言,我真的不喜欢_alloc解决方案,因为我不喜欢它在代码中的外观,因此我决定在函数后面添加动词_create而不是alloc,以表示它正在做什么。

    但是,答案可以归结为我个人的偏好。 只要功能的功能通过读取其名称来清楚,所有的都应该是可以接受的。

    链接地址: http://www.djcxy.com/p/10459.html

    上一篇: Terminology when Initializing C Structures

    下一篇: Approximation of a common divisor closest to some value?