본문 바로가기

C언어

[포프 tv 복습] Type-Generic 함수 만들기, 정적 어서트, 메모리 정렬, 멀티스레딩 Type-Generic 함수 만들기, 정적 어서트, 메모리 정렬, 멀티스레딩 와 제네릭 선택 매개변수 형에 알맞는 수학 함수를 찾아서 호출해주는 매크로 함수 컴파일러가 알아서 구현해 준 것 프로그래머가 이런 매크로를 직접 만들 방법이 없었음 C11에서는 가능 제네릭 선택(generic selection)이라 부룸 _Generic 키워드를 사용 이제 도 이 키워드를 사용해서 직접 구현 가능 _Generic 키워드 _Generic(, ) 컴파일 도중에 여러가지 표현식 중 하나를 선택하는 방법 실행 중에 선택하는 것이 아님 매크로 함수의 대체 목록으로 사용하는 게 일반적 흡사 switch 문과 비슷해 보임 _Generic으로 ceil() 함수를 구현한 예 #include #include #define ceil.. 더보기
[포프 tv 복습] C99, C11 C99 C99 이전의 부동 소수점 연산 오류 처리 부동 소수점 연산 중 오류가 날 경우 그 이유를 오류 조건이라 함 C 라이브러리 함수가 오류 조건을 보고하는 경우가 있음 이 오류 조건의 일부는 errno를 통해 확인 가능 인자가 수학적으로 정의된 범위를 벗어날 경우 : EDOM 오버플로가 발생한 경우 : ERANGE 언더플로가 발생한 경우 : ERANGE가 설정될 수도 있음(구현에 따라 다름) C99의 부동 소수점 연산 오류 처리 좀 더 세분화된 부동 소수점 전용 오류 보고 기능 추가 이것을 '부동 소수점 예외'라고 부름 예외라고 하지만 다르 언어에서 말하는 예외는 아님 그냥 다른 형태의 오류 코드 errno에서 찾을 수 없던 오류 조건도 보고 됨 구현에 따라 다음 중 하나를 지원 여전히 errno을 .. 더보기
[포프 tv 복습] 전처리기 전처리기 전처리기로 할 수 있는 일들 다른 파일을 인클루드 전처리기 지시문 #include을 사용 매크로를 다른 텍스트로 대체 #define, #undef와 전처리기 연산자 #, ##를 사용 소스파일의 일부를 조건부로 컴파일 전처리기 지시문 #if, #ifdef, #ifndef, #else, #elif, #endif를 사용 일부로 오류를 발생시킴 전처리기 지시문 #error를 사용 매크로 대체 : #define #define 식별자 대체_목록(선택) #define A (10) 전처리기가 소스 코드 뒤지다가 A가 보이면 모두 (10)으로 바꿔줌 #define A 이것도 가능 하지만 바꿔줄 내용이 없음 그 대신 다른 전처리기 지시어로 A가 정의 돼 있는지 판단 가능 #define TRUE(1) #define.. 더보기
[면접 대비] C를 사용한 해시 맵 구현 size_t hash_65599(const char* string, size_t len) { size_t i; size_t hash; hash = 0; for(i = 0; i > 16); } 충돌까지 고려한 해시 맵 예 int add(const char* key, int value, size_t (*hash_func)(const char*, size_t)) { size_t i; size_t start_index; size_t hash_id; hash_id = hash_func(key, strlen(key)); start_index = hash_id % BUCKET_SIZE; i = .. 더보기
[면접 대비] C를 사용한 linked list 구현 연결 리스트 전체를 출력하는 코드 예 typedef struct node{ int value; node_t* next; } node_t; void print_node(const node*t head) { node_t* p = head; while(p != NULL){ printf("%d", p->value); p = p->next; } } 헤드 노드 node_t* head = NULL; 해제코드 void destroy(node_t* head) { node_t* p = head; while(p != NULL){ node_t* next = p->next; free(p); p = next; } } node_t* haed = NULL // 생략 destroy(head); head = NULL; 삽입코드 맨 앞에.. 더보기
[포프 tv 복습] C 자료구조 기초 자료구조 기초 자료구조란? - 컴퓨터에서 여러 자료들을 조직적, 체계적으로 저장하는 방법 - 보통 동일한 자료형을 여럿 저장하는 ㅜㄱ조를 의미 - 자료구조에 따라 요소들 사이의 관계를 정의하는 규칙이 있음 - 다음 요인에 따라 상황마다 보다 효율적인 자료구조가 존재 - 데이터에 접근하는 빈도 - 데이터에 접근하는 방법(ex. 삽입, 검색, 읽기, 지우기 등) 자료구조의 효율성 - 효율성은 주로 시간 복잡도를 말함 - 공간 복잡도를 포함하는 경우도 있음 - 따라서 주로 Big-O 표기법을 사용 - 보통 효율성을 논할 때는 하드웨어 최적화를 고려 안 한 이론이 전부 - 적은 용량의 데이터는 그렇지 않을 수 있음 배열 메모리 한 덩어리로 표현 가능한 가장 간단한 자료구조 여러 자료들을 그 메모리 덩어리 안에 .. 더보기
[포프 tv 복습] 가변 인자 함수, 올바른 오류 처리 방법 가변 인자 함수, 올바른 오류 처리 방법 가변 인자 함수 (, ...); 정해지지 않은 수의 매개변수(가변 인자)를 허용하는 함수 반드시 최소 한 개의 정해진 자료형의 매개변수가 필요 가변인자는 '...'로 표현 가변 인자 함수의 예 #include int add_ints(const size_t count, ...) { va_list ap; int sum; sisze_t i; sum = 0; va_start(ap, count); { for(i = 0; i < count; i++){ sum += va_arg(ap, int); } } va_end(ap); return sum; } int main(void) { int result; result = add_ints(1, 16); printf("result: %.. 더보기