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或甚至两者的初始化函数?
由于评论中没有人接受将他们的评论转化为答案的提议,因此我被迫回答我自己的问题。
基本上,一个可能的答案是,正如人工智能所说,没有特定的命名约定。当然,无论使用什么命名方式,都应该是:
为了实现这一目标,评论中提出了一些很好的建议。当foo对象是:
我想以上所有内容都很清楚,但最准确地描述函数中发生的情况的是foo_init和foo_alloc。
就我个人而言,我真的不喜欢 _alloc 解决方案,因为我不喜欢它在代码中的外观,因此我决定在函数后面添加动词 _create 而不是 alloc 以表示它正在做什么。
但我想答案归根结底是个人喜好。只要通过阅读其名称就可以清楚地了解该函数的功能,一切都应该是可以接受的。