못정함

열거형 datatype : enum 본문

C언어 공부/C언어 기타

열거형 datatype : enum

hadara 2024. 10. 16. 16:35

열거형 datatype은 자동으로 인덱스가 지정됨

 

chat gpt께서 힘써주심

C언어에서 **열거형 데이터 타입(enum)**은 상수 집합을 정의할 때 사용되는 데이터 타입입니다. 즉, 여러 상수 값에 이름을 부여하여 코드의 가독성을 높이는 역할을 합니다. 열거형은 기본적으로 정수형 데이터를 사용하며, 각 상수는 0부터 시작하는 정수 값으로 자동 할당됩니다. 하지만 필요에 따라 특정 값을 지정할 수도 있습니다.

### 열거형 정의 방법
```c
enum 열거형이름 { 상수1, 상수2, 상수3, ... };
```

enum 열거형이름 { 상수1, 상수2, 상수3, ... };



### 예시

#include <stdio.h>

enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY };

int main() {
    enum Day today;
    today = WEDNESDAY;

    printf("오늘은 %d번째 요일입니다.\n", today);  // 2번째 요일 출력
    return 0;
}



### 설명
- `enum Day`라는 열거형을 정의했습니다. `MONDAY`는 0, `TUESDAY`는 1, `WEDNESDAY`는 2와 같이 값이 자동으로 할당됩니다.
- 변수 `today`에 `WEDNESDAY`를 할당하면 2라는 값을 저장하게 됩니다.

### 열거형에 값 할당하기
각 상수에 원하는 값을 직접 할당할 수도 있습니다.

enum Day { MONDAY = 1, TUESDAY, WEDNESDAY, THURSDAY = 10, FRIDAY, SATURDAY, SUNDAY };


이 경우 `MONDAY`는 1, `TUESDAY`는 2, `WEDNESDAY`는 3, `THURSDAY`는 10, `FRIDAY`는 11, `SATURDAY`는 12, `SUNDAY`는 13으로 할당됩니다.


### 열거형의 장점
1. 코드 가독성 향상: 상수 값에 의미 있는 이름을 부여할 수 있습니다.
2. 코드 유지보수 용이: 상수 값을 변경해도 해당 이름을 사용하는 부분만 수정하면 됩니다.
3. 디버깅 편의성: 이름을 통해 상수 값을 쉽게 이해할 수 있습니다.

필요한 경우, 열거형은 강력한 도구가 될 수 있습니다!

 

 

 

자료구조 5장

수업 중

 

이거 땜에 공부한 것임

 

/* 열거형 타입 precedence 선언 */
typedef enum {lparen, rparen, plus, minus,  times, divide, mod, eos, operand} precedence;   
//열거형 타입은 자동으로 인덱스가 지정됨.
//lapren 자체가 index 0이라고 생각....해도 됨 


precedence stack[MAX_STACK_SIZE];	int top=-1;/* 스택선언 */  
char expr[MAX_EXPR_SIZE]; /* 입력 문자열 */

/*우선순위 설정*/
static int isp[] = {0,19,12,12,13,13,13,0};  
static int icp[] = {20,19,12,12,13,13,13,0};
/*사실 여기서 우선순위가 바로 설정되는 건 아니고 
아래 postfix 함수의
else {  while(isp[stack[top]] >= icp[token]) 에서 비교할 때 쓰이는 것임(?)
과정을 뜯어보면...
isp[lapren] >= icp[minus]
isp[1] > = icp[4]
0 > = 12
인지 비교
/* 중위표기를 후위표기로 바꾸는 프로그램 */
void postfix(void) {
	char symbol;   // Q. 얘는 for문에서 어떻게 자동으로 증가되는거지? => get_token에서 *symbol = expr[(*n)++]; ???
	precedence token;
	int n = 0;
	push(eos);

   	for(token = get_token(&symbol, &n); token != eos; token = get_token(&symbol, &n)) {
		if(token == operand) printf("%c", symbol);   // &symbol 은 symbol의 주소를 의미 ?
		else if(token == rparen) {
			while(stack[top] != lparen)
				printf("%c",print_token(pop()));
			pop();	//왼쪽 괄호 제거	
            }
		else {  while(isp[stack[top]] >= icp[token])  //이거 관련 사항은 윗 부분에 주석 달아놨음
				printf("%c",print_token(pop()));
			push(token);		
            }
	}
	while((token = pop()) != eos)
		printf("%c ",print_token(token));
	printf("\n");
}

 

 

우선 순위 비교 

	else {  while(isp[stack[top]] >= icp[token])  //이거 관련 사항은 윗 부분에 주석 달아놨음
				printf("%c",print_token(pop()));
			push(token);		
            }

열거형 덕에 쉽게 index처럼 비교할 수 있는 것임

'C언어 공부 > C언어 기타' 카테고리의 다른 글

배열 size 관련 #define MAX_SIZE 100 / sizeof()  (1) 2024.09.18