웹사이트 검색

Linux C 프로그래밍 자습서 28부 - Typedefs


이 페이지에서

  1. C 프로그래밍 언어의 Typedef\n
  2. 결론

진행 중인 C 프로그래밍 자습서 시리즈의 일부인 이 자습서에서는 typedef의 개념에 대해 설명합니다. 이름에서 알 수 있듯이(typedef를 type+def로 생각하십시오) typedef는 기존 데이터 유형에 대한 새 이름을 정의하기 위해 C에서 제공하는 기능입니다.

C 프로그래밍 언어의 Typedef

다음은 typedef 사용 방법을 보여주는 예입니다.

typedef int my_int

키워드 typedef로 시작하는 위 줄은 int 데이터 유형에 my_int라는 새 이름을 부여합니다. 따라서 다음과 같은 코드입니다.

#include <stdio.h>

int main()
{
int a = 10;
printf("The value of a is: %d", a);

return 0;
}

방금 논의한 typedef 예제를 사용할 때 다음과 같이 작성할 수 있습니다.

#include <stdio.h>

typedef int my_int;

int main()
{
my_int a = 10;
printf("The value of a is: %d", a);

return 0;
}

이제 일부 사람들이 물어볼 수 있는 한 가지 질문은 typedef와 #define의 차이점은 무엇입니까? 글쎄요, 둘 다 비슷한 일을 하는 것처럼 보이지만 사실 둘 사이에는 상당한 차이가 있습니다.

우선, typedef는 컴파일러에 의해 해석되는 반면 #define은 전처리 단계 자체에서 해석되기 때문에 컴파일 단계까지 도달하지 않습니다. 그런 다음 typedef는 범위 규칙을 따르는 반면 #define은 그렇지 않습니다. 다음은 이에 대한 예입니다.

#include <stdio.h>

void my_func();

int main()
{
typedef int my_int;
my_int a = 10;
printf("The value of a is: %d", a);
my_func();

return 0;
}

void my_func()
{
my_int b = 20;
printf("The value of a is: %d", b);

return;
}

이 코드가 실행되면 다음 오류가 발생합니다.

main.c: In function ‘my_func’:
main.c:25:5: error: unknown type name ‘my_int’
my_int b = 20;
^

보시다시피 컴파일러는 my_func 함수에서 my_int 유형을 인식할 수 없었습니다. typedef가 유효한 범위가 기본 함수의 범위였기 때문입니다.

그런 다음 typedef와 #define 사이에는 몇 가지 다른 차이점이 있습니다. 마찬가지로 #define을 사용하여 상수 값에 대한 별칭을 만들 수도 있습니다. 즉, #define PIE 3.14와 같은 작업을 수행할 수 있습니다. 또한 관찰한 바와 같이 #define은 세미콜론으로 끝나지 않지만 typedef는 세미콜론으로 종료됩니다.

이제 여전히 typedef가 필요한 이유를 묻습니다. 또는 다른 말로 typedef가 실제로 유용한 곳은 어디입니까? 문자 값을 반환할 때 두 개의 정수를 인수로 받아들이는 함수에 대한 포인터를 반환하는 함수가 있는 코드가 있다고 가정합니다.

모르는 경우 이러한 포인터는 다음과 같은 방식으로 선언됩니다.

char (*fn_ptr) (int, int);

여기서 fn_ptr은 이러한 포인터의 이름입니다.

따라서 이런 종류의 길고 복잡한 선언을 다른 함수의 반환 유형으로 반복해서 사용하는 대신 typedef를 사용하여 fn_ptr을 유형으로 만들 수 있습니다.

typedef char (*fn_ptr) (int, int);

이제 fn_ptr을 사용할 수 있으며 이 유형의 포인터를 나타냅니다.

typedef의 또 다른 용도는 코드가 실행되는 기본 플랫폼에서 제공하는 기본 유형에 해당하는 사용자 정의 데이터 유형을 코드에서 사용하는 것입니다. 이러한 방식으로 typedef는 여러 플랫폼에서 실행되도록 개발된 코드를 쉽게 이해하고 유지 관리하는 데 도움이 됩니다.

결론

따라서 이 자습서에서는 typedef가 수행하는 작업, #define 지시문과 어떻게 다른지, typedef가 코드를 쉽게 읽고 이해하고 유지 관리할 수 있도록 하여 시간을 절약할 수 있는 방법을 포함하여 typedef의 기본 사항에 대해 논의했습니다.

여기에서 사용한 예제를 시도하고 typedef를 더 잘 이해하기 위해 더 많은 예제를 개발하는 것이 좋습니다. 의심이 가거나 질문이 있는 경우 아래에 의견을 남겨주세요.