몽상실현개발주의

[따배씨] 14.23 자료형에게 별명을 붙여주는 typedef 본문

Language/C

[따배씨] 14.23 자료형에게 별명을 붙여주는 typedef

migrationArc 2021. 7. 13. 21:49

[따배씨] 14.23 자료형에게 별명을 붙여주는 typedef

따배씨 - 따라하며 배우는 C언어

14강 구조체_2

14.23 자료형에게 별명을 붙여주는 typedef

#include <stdio.h>
#include <time.h>   // time()

int main(){
    /*
        typedef specifier
        - Give symbolic names (or aliases) to types
        - Does not create new types.
     */
    
    typedef unsigned char BYTE; //Note the scope of BYTE
    
    BYTE x, y[10] = { 0, }, *z = &x;
    
    {
        typedef unsigned char byte;
        
        /* Portable data types */
        
        size_t s = sizeof(byte);
        // sizeof 의 결과값 데이터 형: unsigned int (x86), unsigned long long (x64)
        // 운영체제에 따라 sizeof 의 결과값 데이터형이 바뀜, 전처리기가 처리
        
        // unsigned int s = sizeof(byte); // x86
        // unsigned long long s = sizeof(byte); // x64
    }
    
    
    /*
        This function returns the time since 00:00:00 UTC, January 1, 1970 (Unix timestamp) in seconds
     */
    
    time_t t = time(NULL);
    
    printf("%ld\n", t);
    // 1618665612
  
    return 0;
}

 

 

 

#include <stdio.h>

int main(){
    
    /*
        typedef vs #define
     */
    
    typedef char* STRING;
    
    STRING name = "John Wick", sign = "World";
    
    /*
        - typedef interpretation is performed by the compiler, not the preprocessor
        - More flexible than #define
     
        #define STRING char*
     
        STRING name, sign;
        char *name, sign;   //Note the type of sign
     */
    
    typedef struct complex{
        float real;
        float imag;
    } COMPLEX; // typedef struct complex COMPLEX
    
    typedef struct {double width; double height;} rect; // No tag
    rect r1 = {1.1, 2.2};
    rect r2 = r1;
    
    printf("%f %f\n", r2.width, r2.height);
    // 1.100000 2.200000
    
    return 0;
}
  • '#define' 과 'typedef' 중 typedef 를 권장
    • #define 은 전처리기, compile 하기 전에 처리됨
      • 단순히 내부적으로 복사해서 붙여넣는 형태
    • typedef 는 compiler 가 처리

 

 

 

#include <stdio.h>

/* Complicated function Declarations */

char char3[3] = { 'A', 'B', 'C' };

char (*complicated_function1())[3]{ // Function Return Pointer To Char[3]
    return &char3;  // Returns a pointer to char[3]
}

typedef char (*FRPTC3())[3];    // Function Returns Pointer To Char[3]
typedef char (*(*PTFRPTC3)())[3];

char(*(*fptr1)())[3] = complicated_function1;

FRPTC3 *fptr2 = complicated_function1;
PTFRPTC3 *fptr3 = complicated_function1;

/* Use typedef to make declarations simplier */

typedef char c3[3];

c3* complicated_function2(){
    return &char3;  // Returns a pointer to char[3]
}

int main(){
    char(*ret_val)[3] = fptr1();
    
    printf("%c %c %c\n", (*ret_val)[0], (*ret_val)[1], (*ret_val)[2]);
    // A B C
    
    c3 * my_c3 = fptr2();
    
    printf("%c %c %c\n", (*my_c3)[0], (*my_c3)[1], (*my_c3)[2]);
    // A B C
    
    return 0;
}
  • typedef 의 활용 예시

 

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

Comments