2011-04-07 5 views

답변

2

C에서 유형은 변수의 기본값을 지정할 수 없습니다. C++을 생성자와 함께 사용하거나 인스턴스화 할 때 변수를 체계적으로 초기화해야합니다.

1

C에서는 기본값이나 생성자 같은 것이 없습니다. 일부 기본 값을 사용하여 struct을 초기화하는 함수를 작성해야합니다. 또는 C++로 전환하여 struct의 멤버를 일부 기본값으로 초기화하는 생성자를 만들 수 있습니다.

1

: 20의 내용은 unsigned int size: 20의 의미는 here을 참조하십시오.

bit fields에 대한 위키 백과 문서입니다. u는 OOP 언어로 생성자의 개념과 유사 것을 사용한다 구조 멤버 기본 ..

typedef struct d { 
    unsigned int size; 
} D{20}; 

당신은 당신의 객체를 생성 wenever 구조체 멤버에 대한 기본 값을 지정할 수 있습니다이 방법의 값을 만들기위한

0

그 구조는 ...

+0

'typedef'가 있어야하나요? –

+0

그게 필요하지 .. 아니 그냥 .. 그냥 간과 .. 그냥 코드를 복사하고 여기에 붙여 넣기 ... – pratik

+0

그것은 필요하지 것보다 더 나쁘다는 뜻 : 그것은'typedef 구조체 D 조;'_and_' 구조체 D 조 = {20} ;- 이렇게 컴파일되지 않습니다. 내 대답을 보라. –

1

pratik의 제안 (typedef 자신의 사용 오타가 가정) 작동합니다 :) .. 희망은 도움이되지만 주위에 떠있는 글로벌 객체를 떠난다. 대안 기술 :

struct d { 
    unsigned int size; 
}; 
/* use only *one* of these next lines */ 
#define D (struct d){20} // C99 
#define D {20}    // C89 
… 
struct d foo = D;   // in either case 

C99 버전은이 "생성자", 예를 들어, 일부 오용을 잡을 수있는 장점이있다,

struct d { 
    unsigned int size; 
}; 
#define D99 (struct d){.size = 20} 
#define D89 {20} 
… 
float a[17] = D89; // compiles, but is that really what you meant? 
float b[17] = D99; // will not compile 

또한, 당신은 아마 인수와 함께, 더 복잡한 생성자를 만들 수있는 "복합 리터럴"기술을 사용할 수 있습니다.