Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
관리 메뉴

OnlyOne

구조체(Derived Type) 본문

Control Engineering/C Programming

구조체(Derived Type)

Taesan Kim 2024. 9. 4. 23:05

 

 

본 포스팅은 한동대학교 21학번 과학기술전문사관 후보생 최윤석 선배님의 C언어 교육자료로 제작되었음을 알려드립니다. 감사합니다.

구조체(Derived Type)

 

Intro

공통된 구조를 가지는 여러 묶음의 정보를 더 간편히 선언하고 불러오는 방법이 있을까?

 

구조체의 선언

struct 구조체이름
{
 자료형 멤버이름;
};

 

구조체의 변수 선언

struct Complex //Complex라는 이름의 구조체 선언
{
 	double real;
 	double imag;
};
int main()
{
 	struct Complex num1; //구조체 변수 선언
 	struct Complex num2 = {0}; //선언 및 모든 멤버 0으로 초기화
	struct Complex num3 = {1.0, 2.0}; //선언 및 임의의 값으로 멤버 초기화
}

 

 

구조체 멤버 접근

struct Complex {
 	double real;
 	double imag;
}
;
int main() {
 	struct Complex num1;
 	num1.imag = 1.0;
 	num1.real = 2.0; // 멤버 이름으로 접근
}

 

 

typedef

데이터 타임을 원하는 다른 이름으로 바꿀 때 사용한다. 

typedef int int32_t;

 

예제

typedef struct _complex // 이름 앞에 _를 붙인다.
{
 	double real;
 	double imag;
} Complex;

int main()
{
 	Complex num1; //선언 단계에서 struct 키워드 필요 없어졌다.
 	num1.imag = 1.0;
 	num1.real = 2.0;
}

 

 

열거형(enum)

c안에서 에러를 확인하고 에러별로 동작으로 다르게 하고 싶다. 만약 에러의 종류가 다양해지면 모든 에러를 변수로 만드는 것은 매우 번거롭다. 

 

우리는 1씩 증가하는 숫자를 자동으로 만들고, 각 숫자의 의미를 추상화하여 에러를 표현할 것이다.

enum Error
{
 	ERROR_NONE = 0, //초기값
 	DIVIDE_ZERO,
 	FAIL_REAL_FILE,
	…
};

 

typedef enum _Error
{
 	ERROR_NONE = 0,
 	DIVIDE_ZERO,
 	FAIL_REAL_FILE
} Error;

int main()
{
 	Error error;
 	error = DIVIDE_ZERO;
 	printf("Error code: %d\n", error); //Error code: 1
}

 

enum은 값의 의미 추상화 역할을 한다.

 

 

열거형과 switch

#include <stdio.h>
typedef enum _Error
{
 	ERROR_NONE = 0,
 	DIVIDE_ZERO,
 	FAIL_READ_FILE
} Error;
int main()
{
 	Error error;
	error = DIVIDE_ZERO;
 	switch(error)
 	{
 		case DIVIDE_ZERO:
 			fprintf(stderr, "Error: The value is divided by 0.\n");
 			break;
 		case FAIL_READ_FILE:
 			fprintf(stderr, "Error: Fail to read file\n");
 			break;
 		default:
 			break;
 	}
}

열거형은 프로그램 가독성 향상을 위해 종종 switch문과 함께 쓰이곤 한다.

 

열거형 연산

enum은 정수형으로 형변환할 수 있다. 정수형 타입을 enum 타입으로 형변환할 수 있다.

#include <stdio.h>

typedef enum _Mode
{
    DEFAULT = 0b00,
    MODE1 = 0b01,
    MODE2 = 0b10,
} Mode;

int main()
{
    int mode = MODE1 | MODE2; //3
    printf("Mode: %d\n", mode);
    return 0;
}

'Control Engineering > C Programming' 카테고리의 다른 글

Practice[Integral]  (0) 2024.09.04
Practice[Root Formula]  (0) 2024.09.04
Operator(비트연산자와 삼항연산자)  (0) 2024.08.10
오버플로우(Overflow)와 언더플로우(Underflow)  (0) 2024.08.10
C언어란  (1) 2024.08.10