初始化C结构时的术语

Lef*_*ris 6 c terminology initialization

这将是一个简单的问题,但谷歌搜索似乎并没有给我一个答案.我在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;
}
Run Code Online (Sandbox Code Playgroud)

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

foo* f1 = foo_init1(10,20,"hello");
Run Code Online (Sandbox Code Playgroud)

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

foo f1;
foo_init2(&f1,10,20,"hello");
Run Code Online (Sandbox Code Playgroud)

所以第二种方法可以很容易地初始化堆栈中的对象,但是如何调用呢?这基本上是我的问题,如何引用第二种初始化方法.

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

作为一个额外的问题,你们在C编码时如何工作?您是否确定了您正在进行的对象的使用情况,并确定您是否应该具有type1或2或甚至两者的初始化函数?

Lef*_*ris 1

由于评论中没有人接受将他们的评论转化为答案的提议,因此我被迫回答我自己的问题。

基本上,一个可能的答案是,正如人工智能所说,没有特定的命名约定。当然,无论使用什么命名方式,都应该是:

  • 为了清晰起见,所有项目保持一致
  • 可以被其他程序员识别为执行其实际操作的函数。

为了实现这一目标,评论中提出了一些很好的建议。当foo对象是:

  • 传递给函数内部的初始化:foo_init
  • 在函数内部分配并返回指针:foo_allocfoo_makefoo_new

我想以上所有内容都很清楚,但最准确地描述函数中发生的情况的是foo_initfoo_alloc

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

但我想答案归根结底是个人喜好。只要通过阅读其名称就可以清楚地了解该函数的功能,一切都应该是可以接受的。