728x90

열거형(enumerated type)

열거형을 사용하여 정수 상수를 나타내는 기호 이름을 선언할 수 있다.

enum 키워드를 사용하여 새로운 데이텋형을 만들고, 그 데이터형이 가질 수 있는 값들을 지정할 수 있다.

 

열거형은 프로그램의 가독성을 높이는데 사용한다. 신택스는 구조체와 비슷하다. 

ex)

enum spectrum {red, orange, yellow, green, blue, violet};

enum spectrum color;

 

red ~ violet 처럼 여러된 상수들은 int형이지만 다른 정수형을 사용해도 상관없다.

red ~ violet은 각각 0~5까지의 값을 가진다.

 

열거된 리스트에 있는 상수들은 기본 설정으로 정수값 0,1,2,3 등으로 대입된다.

 

열거된 상수들을 사용자가 원하는 값으로 초기화 시킬 수 있다.

enum level {low = 100, medium = 500, high = 2000};

한 상수에만 값을 지정하고 그 다음 상수들에게 지정하지 않으면 그 다음 상수들에는 연속적으로 수가 매겨진다.

 

ex)

enum feline { cat, lynx = 10, puma, tiger};

일러한 선언에는 cat은 0, lynx = 10, puma = 11, tiger = 12로 초기화된다.

 

열거형의 목적은 프로그램의 가독성을 높이고 유지하기 쉽게 하는것이다.

 

 

typedef

typedef는 어떤 데이터형에 원하는 이름을 부여할 수 있는 데이터관련 고급 기능이다. #define과 비슷하지만, 세가지 차이점이 있다.

1.#define과 달리, typedef는 값이 아니라 데이터형에만 기호 이름을 부여할 수 있도록 제한된다.

2.typedef 해석은 전처리기가 아니라 컴파일러가 수행한다.

3.위 두개의 범위 내에서, typedef가 #define보다 융통성 있다.

 

typedef를 사용하여 BYTE를 char형 변수인 것 처럼 사용하기.

ex)

typedef char BYTE;

BYTE x,y[10], *z;

 

typedef 명령문이 어디에 있느냐에 따라 달라진다. typedef문이 함수 안에 들어 있으면, 범위가 지역적으로 그 함수에만 한정된다. 정의가 함수 바깥에 있으면, 범위는 전역적으로 모든 함수에 적용된다.

 

typedef char * STRING;

char형 포인터를 가리키는 포인터형을 STRING으로 사용할 수 있다. 즉 typedef를 통해 STRING은 char형을 가리키는 포인터를 의미하는 식별자가 된다.

이후 다음과 같은 선언이 가능하다.

STRING name, sign;

 

위 선언은 다음과 같다.

ex)

char *name, *sign;

 

typedef가 아닌 #define을 사용할 때

#define STRING char *

STRING name, sign;

위 선언은 char *name, sign;이 된다.

이경우에 name만 포인터가 된다.

 

 typedef를 사용하는 한가지 이유는, 자주 쓰이는 데이터형을 위한 편리하고 쉽게 인식할 수 있는 이름을 만드는 것이다.

typedef를 사용하는 두번째 이유는 복잡한 데이터형을 typedef이름으로 간단하게 표현할 수 있기 때문이다.

ex)

typedef char (*FRPTC())[5];

FRPTC를 char형 5개짜리 배열을 가리키는 포인터를 리턴하는 함수의 데이터형으로 만든다.

 

복잡한 선언        //어렵다

int board[8][8]              //int형 배열의 배열

int ** ptr;                     //int형을 가리키는 포인터를 가리키는 포인터

int *risks[10];                //int형을 가리키는 포인터 10개짜리 배열

int (*rusks)[10];            //int 10개짜리 배열을 가리키는 포인터

int * oof[3][4];            //int형을 가리키는 포인터들의 3x4 배열

int (*uuf)[3][4];           //int형 3x4배열을 가리키는 포인터

int (*uof[3])[4];           //int형 4개짜리 배열을 가리키는 포인터 3개짜리 배열

 

1.배열을 나타내는 [ ]과, 함수를 나타내는 ( )는 우선순위가 같다.

이들은 간접 연산자 *보다 우선순위가 높다.

2.[ ]과 ( )는 왼쪽에서 오른쪽으로 결합한다. 

ex) int goods[12][50];

int형 50개짜리 배열을 12개 가지는 배열을 만든다.

3.[ ] 와 ( )는 우선순위가 같다.

ex) int (*rusks)[10];

위는 rusksㄹ를 int형 10개짜리 배열을 가리키는 포인터로 만든다.

 

 

728x90

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

C언어 공부 35  (0) 2019.06.22
C언어 공부 34  (0) 2019.06.22
C언어 공부 32  (0) 2019.06.22
C언어 공부 31  (0) 2019.06.16
C언어 공부 30  (0) 2019.06.16

+ Recent posts