이것은 쉬운 질문이 될 것이지만 주위를 인터넷으로 검색하는 것은 대답을 제공하지 않는 것 같습니다. C에서 그것을 이해하는 방법은 foo가 구조체 일 때 foo 객체를 초기화하는 두 가지 방법이 있습니다. 예를 들어 아래의 코드를보십시오C 구조체를 초기화 할 때의 용어
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는 필요 .. 어떻게? 아래 코드를 살펴보십시오.
foo f1;
foo_init2(&f1,10,20,"hello");
두 번째 방법은 스택에서 개체를 쉽게 초기화 할 수 있지만 어떻게 호출합니까? 이것은 기본적으로 내 질문입니다, 초기화의 두 번째 방법을 참조하는 방법.
첫 번째 것은 foo에 대한 포인터를 할당하고 초기화합니다. 두 번째 것은 foo를 초기화합니다 ... 뭐라 구요? 참고?
보너스 질문으로 C로 코딩 할 때 어떻게 일합니까? 당신이 만들고있는 객체의 사용법을 결정하고 그것을 통해 type1, 또는 2 또는 둘 다 초기화 함수를 가져야하는지 결정합니까? 모든 웰 두 방법에 대한 용어가 정의 된 경우
저는 할당하는 사람에게'_new'를, 그렇지 않은 사람을 위해'_init'라고 부릅니다. 또한,'_new'가 내부적으로'_init'을 호출하여 코드를 쉽게 유지 보수 할 수있게하십시오. (가끔은'_nake' 대신에'_make'라고 부릅니다.) –
크리스 (Chris)는 전화하는 방식에 대해 좋은 통찰력을 가지고 있습니다. 투표를 할 수 있도록 답변을하지 않으시겠습니까? 또한 같은 질문을 가진 잠재 고객이 볼 수 있도록 해주세요. 또한 ... 사람들이 그들을 참조 할 수있는 표준 방법이 있습니까? 함수 이름 옆에있는 다른 사용법을 즉시 이해할 수있는 누군가 내 코드를보고 싶습니다. ( – Lefteris
) @ChrisLutz : 타입 이름에'_new','_init'를 추가하면됩니다. foo_new','foo_init')? 그렇지 않으면 구현에 예약 된 식별자와 충돌하게됩니다. (이 사실을 알고 있으리라 확신하지만, 그렇지 않을 수도 있습니다.) –