Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- php
- BFS
- C언어
- String
- Algorithm
- 생활코딩
- programmers
- 종만북
- 따라하면서 배우는 C언어
- udemy
- 인프런
- Cleancode
- server
- web
- 백준
- 따배씨
- BOJ
- greedy
- Algospot
- JavaScript
- 따라하며 배우는 C언어
- dfs
- graph
- Math
- 정수론
- DP
- C
- Python
- sorting
- BASIC
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 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 가 처리
- #define 은 전처리기, compile 하기 전에 처리됨
#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 의 활용 예시
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
'Language > C' 카테고리의 다른 글
[따배씨] 14.25 qsort() 함수 포인터 연습문제 (0) | 2021.07.14 |
---|---|
[따배씨] 14.24 복잡한 선언 Declaration 을 해석하는 요령 (0) | 2021.07.13 |
[따배씨] 14.22 함수 포인터의 사용 방법 (0) | 2021.07.11 |
[따배씨] 14.21 함수 포인터의 원리 (0) | 2021.07.11 |
[따배씨] 14.20 이름 공간 공유하기 (0) | 2021.07.07 |
Comments