初始化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。
个人而言,我真的不喜欢_alloc解决方案,因为我不喜欢它在代码中的外观,因此我决定在函数后面添加动词_create而不是alloc,以表示它正在做什么。
但是,答案可以归结为我个人的偏好。 只要功能的功能通过读取其名称来清楚,所有的都应该是可以接受的。
链接地址: http://www.djcxy.com/p/10459.html上一篇: Terminology when Initializing C Structures
下一篇: Approximation of a common divisor closest to some value?