source

열거(typedef enum)의 중요도

manysource 2023. 10. 22. 20:10

열거(typedef enum)의 중요도

저는 최근에 저를 위해 게시된 답변에서 이것을 보았습니다.

typedef enum
{
    NO_OP,
    ADDITION,
} operator_t;

int main()
{
    operator_t operator = NO_OP;
}

이?typedef enum우리가 왜 그걸 사용해야 합니까?구글에 검색해보니 다음과 같습니다: http://www.programiz.com/c-programming/c-enumeration

지금은 너무 기술적으로 들리는데 무슨 일인지, 왜 그런 걸 쓰는지 이해가 안 가는 것 같아요.

보너스(옵션):어떤 유형의 변수가operator_t?

  1. "너무 기술적인" 것은 절대 아닙니다.

  2. "typed프"와 "enum"는 완전히 다른 두 가지입니다.

  3. "enums"를 가지는 기본적인 이유는 "magic nums"를 피하기 위해서입니다.

    세 가지 "상태"가 있다고 가정해 보겠습니다. STOP, CARNITY, GO.당신의 프로그램에서 그들을 어떻게 표현합니까?

    한 가지 방법은 문자열 리터럴 "STOP", "주의" 및 "GO"를 사용하는 것입니다. 그러나 이는 C "스위치/케이스" 블록에서 사용할 수 없다는 사실을 포함하여 많은 문제를 가지고 있습니다.

    다른 방법은 정수 값 "0", "1" 및 "2"에 매핑하는 것입니다.이것은 많은 이점을 가지고 있습니다.하지만 코드에서 "STOP"을 보는 것은 "0"을 보는 것보다 훨씬 더 의미가 있습니다.당신의 코드에 "0"을 그렇게 사용하는 것은 "마법의 숫자"의 한 예입니다.마법의 숫자는 나쁨: "의미 있는 이름"을 대신 사용하고자 합니다.

이 언어에 enum이 도입되기 전에 C 프로그래머들은 매크로를 사용했습니다.

   #define STOP 0
   #define CAUTION 1
   #define GO 2

현대의 C/C++에서 더 나은, 깨끗한 접근법은 대신 enum을 사용하는 것입니다.

enum traffic_light_states {
  STOP,
  CAUTION,
  GO
}; 

"typedef"를 사용하면 다음과 같은 유형의 변수를 쉽게 선언할 수 있습니다.

typedef enum {
  STOP,
  CAUTION,
  GO
} traffic_light_states_t ; 

typedef기존 유형의 대체 이름을 정의하는 데 사용됩니다.enum다음과 같이 선언할 수도 있었습니다.

enum operator_t
{
    NO_OP,
    ADDITION,
};

다음과 같은 변수를 선언할 수 있습니다.

enum operator_t x = NO_OP;

이것은 좀 장황해서 당신은 다음을 사용할 것입니다.typedef이 유형에 대한 더 짧은 별칭을 정의하려면:

typedef enum operator_t operator_t;

이것은 정의합니다.operator_t활자를 뜻함enum operator_t다음과 같이 변수를 초기화할 수 있습니다.

operator_t x = NO_OP;

다음 구문:

typedef enum
{
    NO_OP,
    ADDITION,
}   operator_t;

전체 프로세스를 한 단계에 수행하므로 (태그 없음 또는 태그 없음)를 정의합니다.enum를 입력하고 별칭을 지정합니다.operator_t.

:operator_t입니다.enum데이터 유형, 자세한 내용은 여기에서 확인하십시오. https://en.wikipedia.org/wiki/Enumerated_type

def enum이란 무엇이며 왜 사용해야 합니까?

거기에는 두 가지 다른 것이 있습니다: typedef와 enumerated type("enum").typedef는 type의 대체 이름을 선언하는 메커니즘입니다.열거된 유형은 해당 유형의 유효한 값을 나타내는 기호 상수의 관련 집합이 있는 정수 유형입니다.

열거형을 먼저 살펴보면, 열거형 선언의 전체 형태는 다음과 같이 구성됩니다.enum키워드 다음으로 특정 열거형을 식별하는 태그가 표시되고, 그 다음으로 기호 열거형 상수가 소문자로 표시됩니다.기본적으로 열거 상수는 0에서 시작하는 연속 정수 값에 해당합니다.예를 들어,

enum operator {
    NO_OP,
    ADDITION
};

보다시피, 이것은 a와 유사한 점이 있습니다.struct선언을 하고, 그리고 a처럼.struct선언, 해당 열거된 유형의 변수를 동일한 문으로 선언할 수 있습니다.

enum operator {
    NO_OP,
    ADDITION
} op1, op2, op3;

또는 enum의 태그를 참조하여 나중에 선언할 수 있습니다.

enum operator op4, op5;

마찬가지로.struct선언, 태그는 생략될 수 있으며, 이 경우 열거된 유형은 소스 코드의 다른 곳에서 참조할 수 없습니다(그러나 해당 유형의 선언된 변수는 여전히 괜찮습니다).

enum {
    NO_OP,
    ADDITION
} op1, op2, op3;

이제 타이프 디프로 갑니다.제가 이미 썼듯이, typedef는 type의 대체 이름을 선언하는 수단입니다.그것은 그것을 넣음으로써 작동합니다.typedef그렇지 않으면 변수 선언이 될 수 있는 것 앞에 키워드를 지정합니다. 그러면 변수 이름이 될 기호가 유형의 대체 이름이 됩니다.예를 들면...

typedef unsigned long long int ull_t;

선언합니다ull_t활자의 대체 이름이 되다unsigned long long int 두 을 (의 범위 에서) 할 수 있습니다 이후 두 형식 이름을 (형식 def 선언의 범위 내에서) 서로 교환하여 사용할 수 있습니다.

당신의 경우, 당신은

typedef enum
{
    NO_OP,
    ADDITION,
}   operator_t;

이를 선언합니다.operator_t태그 없는 열거형에 대한 별칭으로 지정됩니다.이런 방식으로 typedef를 선언하면 열거형이 태그가 없어도 typedef 이름을 통해 다른 곳에서 열거형을 사용할 수 있습니다.이것은 열거된 유형의 축약식 이름을 선언하는 데 상당히 일반적인 메커니즘이며, 구조의 경우에도 유사한 기술이 일반적입니다.

보너스(옵션):operator_t는 어떤 종류의 변수입니까?

설명드린 것처럼.operator_t변수가 아니라 유형입니다.특히 열거된 유형이며 기호는NO_OP그리고.ADDITION해당 유형의 값을 나타냅니다.

정보, 구조 및 조합에 대한 유형 개발은 완전한 낭비입니다.입력할 문자 몇 개를 저장하는 것의 의심스러운 이점을 위해 중요한 정보를 숨깁니다.

새 코드에 사용하지 마십시오.

기술적으로, 타입디프는 이미 존재하는 것에 대한 새로운 이름, 즉 별칭을 도입합니다.즉, type def는 새로운 type이 아닙니다.활자 시스템은 그들을 앨리어싱 된 활자와 똑같이 취급할 것입니다.

반대자들은 예를 들어, 열거형/구조형/조합형에 대한 유형 데프에 대한 사례가 만들어지는 놀라운 Peter van der Linden 책 Expert C Programming을 읽음으로써 자신을 교육할 수 있습니다.

typedef와 enum은 두가지 다른 개념입니다.다음과 같이 코드를 다시 작성할 수 있습니다.

enum operator
{
  NO_OP,
  ADDITION
};

typedef enum operator operator_t;

첫번째 문은 다음과 같은 열거를 선언합니다.operator, 두 개의 가치관을 가지고 있습니다.두 번째 문은 열거가 다음과 같이 선언합니다.operator이제는 유형으로도 알려지게 됩니다.operator_t.

구문을 사용하면 이 두 문을 하나의 문으로 결합할 수 있습니다.

 typedef enum operator
 {
    NO_OP,
    ADDITION,
 } operator_t;

그리고 마지막으로 열거를 위한 이름을 생략합니다. 어차피 열거를 위한 데이터 유형이 있기 때문입니다.

 typedef enum
 {
    NO_OP,
    ADDITION,
 } operator_t;

위키피디아는 유형의 디에프가 무엇인지에 대해 좋은 토론을 하고 있습니다.

typedef는 C 및 C++ 프로그래밍 언어의 키워드입니다.typedef의 목적은 더 기본적인 기계 type 1에서 복잡한 type을 형성하고 이러한 조합에 더 간단한 이름을 할당하는 것입니다.표준 정의 또는 선언이 번거롭거나, 잠재적으로 혼란스럽거나, 구현마다 다를 가능성이 있는 경우에 가장 많이 사용됩니다.Wikipedia의 Typedef에 대한 자세한 설명은 이 페이지를 참조하십시오.

열거된 유형을 사용하면 관련 아이디어 목록에 대한 기호 이름을 만들 수 있습니다.

예를 들어보면 enum을 사용하여 특정 변수 집합에 사용할 산술 연산을 선택할 수 있습니다.

다음 예제 코드는 열거가 무엇에 유용한지에 대한 좋은 아이디어를 제공합니다.

enum ARITHMETIC_OPERATION {ADD, SUBTRACT, MULTIPLY};

int do_arithmetic_operation(int a, int b, enum ARITHMETIC_OPERATION operation){

   if(operation == ADD)
       return a+b;

   if(operation == SUBTRACT)
       return a-b;

   if(operation == MULTIPLY)
       return a*b;
}

enum이 없는 경우 대신 다음과 같은 작업을 수행합니다.

#define ADD 0
#define SUBTRACT 1
#define MULTIPLY 2

int do_artithmetic_operation(int a, int b, int operation);

연산이 실제로 정수가 아니라 ADD, MUMPLIGHT 또는 SUCTUCT 중 하나인 산술 연산을 나타내는 기호 유형이기 때문에 이 대안은 가독성이 떨어집니다.

다음 링크는 Enum을 사용하는 좋은 논의와 샘플 코드를 제공합니다.

http://www.cs.utah.edu/ ~germain/PPS/토픽/C_Language/enumerated_types.html

http://www.cprogramming.com/tutorial/enum.html

http://cplus.about.com/od/introductiontoprogramming/p/enumeration.htm

언급URL : https://stackoverflow.com/questions/34323130/the-importance-of-c-enumeration-typedef-enum