작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
173
0
#include <bits/stdc++.h>
using namespace std;
/*
Union
- Store differnt data types in the same memory space
- Structure vs Union
*/
/*
유니온은 유니온 안에 다른 데이터형들이 여러개 있어도 메모리공간을 같이 공유해서 사용한다.
그래서 밑의 my_union은 8바이트가 잡히게된다.
*/
union my_union {
int i;
double d;
char c;
};
int main()
{
union my_union uni;
cout << sizeof(uni) << endl;
cout << (long long)&uni << endl;
//모두 맴버의 같은 주소가 나온다 -> 주소를 공유한다.!!
cout << (long long)&uni.i << " " << (long long)&uni.d << " " << (long long)&uni.c << endl;
//결과는 A에 대해서 나온다!
uni.i = 5;
uni.c = 'A';
union my_union uni2 = uni;
union my_union uni3 = { 10 }; // First member only
union my_union uni3 = { .c = 'A' };
return 0;
}
=================
현재 소스에서
union my_union uni3 = { .c = 'A' }; 를하니 오류가 뜨는데 왜 이런거죠?
답변 1
0
안녕하세요 :)
C++ 로 작성하셔서 그렇습니다.
아래와 같이 C언어로 작성하시면 Designated initializer를 문제 없이 사용하실 수 있습니다.
// test.c 파일
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
union my_union {
int i;
double d;
char c;
};
union my_union uni;
uni.i = 5;
uni.c = 'A';
union my_union uni2 = uni;
union my_union uni3 = { 10 }; // First member only
union my_union uni4 = { .c = 'A' };
return 0;
}
C++의 Designated initializing 의 경우 이는 버전 별로 지원 여부가 다릅니다.
자세한 내용은 하단 링크를 참조해주세요 :)
https://stackoverflow.com/questions/18731707/why-does-c11-not-support-designated-initializer-lists-as-c99
감사합니다.