반응형
C++ 및 C에서 Union 초기화
다음과 같이 정의된 헤더 파일에 상수를 사용하는 작동 C 라이브러리를 만들었습니다.
typedef struct Y {
union {
struct bit_field bits;
uint8_t raw[4];
} X;
} CardInfo;
static const CardInfo Y_CONSTANT = { .raw = {0, 0, 0, 0 } };
저는 알고 있습니다..rawinitializer는 C only 구문입니다.
C 및 C++에서 사용할 수 있도록 결합이 있는 상수를 정의하려면 어떻게 해야 합니까?
저도 같은 문제가 있었습니다.C89의 경우는 다음과 같습니다.
C89 스타일 이니셜라이저의 경우 선언된 순서대로 구조 구성원을 초기화해야 하며, 조합의 첫 번째 구성원만 초기화할 수 있습니다.
C++11을 사용하면 다음과 같이 자신의 컨스트럭터를 작성할 수 있다고 생각합니다.
union Foo
{
X x;
uint8_t raw[sizeof(X)];
Foo() : raw{} { }
};
이 기본값은 유형 조합을 초기화합니다.Foo현역으로raw, (C++11 이전에는 완전한 개체가 아닌 배열을 초기화할 방법이 없었습니다.)
저는 다음과 같은 길을 선택하기로 했습니다.
- 사용하지않음
.member초기화 - 쓸모가 없는
static const struct Foobar구성원의 초기화
대신 글로벌 변수를 선언합니다.
extern "C" {
extern const struct Foobar foobar;
}
글로벌 섹션에서 초기화합니다.
struct Foobar foobar = { 0, 0, 0, 0 };
그리고 현대 ANSI C99 구문으로 C++ 컴파일러를 도청하는 대신에 나는 링커가 C 심볼을 디매그링하는 작업을 하도록 했습니다.
언급URL : https://stackoverflow.com/questions/11555702/union-initialization-in-c-and-c
반응형
'programing' 카테고리의 다른 글
| Oracle은 날짜에 '%'와 같이 사용 (0) | 2023.09.16 |
|---|---|
| 매개 변수가 있는 Pandas read_sql (0) | 2023.09.16 |
| 비슷한 단어는 어떻게 질의합니까? (0) | 2023.09.11 |
| 두 개의 열을 하나로 선택하는 방법은? (0) | 2023.09.11 |
| 빈 구조의 크기는 C에서 0이고 C++에서 1입니다. 왜죠? (0) | 2023.09.11 |