[C, C++] typedef 사용 이유

typedef 사용 이유 typedef는 자료형의 별칭을 정의할 때 사용한다. 아래 코드에서 char는 int_8의 별칭을 가지게 되고 char 혹은 int_8 중 아무거나 써도 같은 결과를 갖는다. 가독성의 증가 가장 흔하게 볼 수 있는 예는 자료형에 비트수를 넣는 것이다. signed char 대신 int8_t, unsigned char 대신 uint8_t, short 대신 uint16_t와 같이 정의하여 만들 자료가 정확히 몇 비트 … Read more

[C, C++] 크기가 0인 배열의 사용 이유 (flexible array member)

크기가 0인 배열 크기가 0인 배열을 멤버로 가지는 구조체를 목격했다. arr[0]이 실제로 0의 크기를 갖는지 확인하기 위해 sizeof로 출력해봤더니 0이 맞다. 어디에 쓰는지 몰라서 인터넷을 뒤졌다. 검색 키워드 크기가 0인 배열은 인터넷에 아래의 키워드들로 검색할 수 있다. 이 글은 크기가 0인 배열을 간략히만 소개할 것이므로 자세한 내용은 위 키워드들로 검색이 필요하다. 크기가 0인 배열의 사용 … Read more

[C, C++] 가변인자를 가지는 매크로(define) 구현

가변인자만을 가지는 매크로 구현 테스트환경 : Windows10 / Visual Studio Code / gcc 6.3.0 함수에 가변인자를 사용할 수 있듯이 매크로에도 가변인자를 사용할 수 있다. [C, C++] 가변인자를 가지는 함수 구현 가변인자만을 가질 때와 가변인자와 고정인자를 같이 가질 때 매크로 구현법이 다른데, 먼저 가변인자만을 가지는 매크로 구현은 아래와 같다. (…)는 가변인자임을 표시하며 __VA_ARGS__는 가변인자를 입력받는다. 가변인자와 … Read more

[C, C++] 매크로(define) 여러줄로 정의

다른 글 [C, C++] 가변인자를 가지는 매크로(define) 구현 매크로 여러줄 정의 방법 매크로는 기본적으로 #define 뒤에 따라오는 한줄만 정의한다. 그러나 여러 줄을 하나의 매크로에 정의해야 할 일이 생길 수도 있다. 그럴때는 가장 뒤에 역슬래시()만 입력하면 된다. 구현 테스트환경 : Windows10 / Visual Studio Code / gcc 6.3.0 라인 가장 뒤에 역슬래시를 입력하고 그 다음줄에 계속 … Read more

[C, C++] 가변인자를 가지는 함수 구현

서론 우리는 printf 함수 사용시 출력하고 싶은 내용이 하나씩 늘어날 때마다 인자를 하나씩 늘려나간다. 이처럼 인자의 개수를 마음대로 조절하여 사용할 수 있는 함수를 구현한다. 가변인자를 가지는 함수 구현 전체 코드 코드 해석 가변인자를 사용하기 위해서는 stdarg.h가 필요하다. 이 헤더파일에는 va_start, va_end, va_arg, va_copy가 정의되어 있다. 이 중 va_start, va_end, va_arg를 사용한다. 가변인자를 가지는 함수를 만들기 … Read more

[C, C++] size_t, time_t 등에서 _t의 뜻

clock_t C언어에는 시간을 측정하는 clock함수가 있다. 그리고 이 함수는 리턴값으로 clock_t의 자료형을 받는다. clock_t 뿐 아니라 size_t, time_t 등 _t가 쓰여진 자료형들을 어렵지 않게 만날 수 있다. _t t는 type의 약자로, typedef로 정의된것을 의미한다. C언어의 stdint.h 파일을 보면 이를 확인할 수 있다. _t는 typedef로 이름을 새롭게 정의한 것일 뿐 컴파일러를 위한 표현이 아닌 사람의 가독성을 … Read more

[C, C++] 함수포인터와 콜백함수

이 글은 포인터의 개념을 알고 있다는 가정 하에 작성되었습니다. 서론 함수포인터는 입사 후 외부업체의 API를 사용하면서 처음 접했다. 함수포인터를 학습하다 보니 콜백함수가 등장했고, 콜백함수를 학습하다 보니 API에 함수포인터가 왜 사용되는지 알게 되었다. 알고 보니 API에 흔하게 사용되었다. 함수포인터 포인터는 변수의 주소값을 가진다. 그리고 함수포인터는 함수의 주소값을 가진다. 주체만 다를 뿐이지 주소를 저장한다는 포인터의 본래 목적은 … Read more

[C, C++] int const, const int, int const *, int * const

const(상수) 변수와 달리 const는 한번 만들어진 자료를 수정할 수 없게 상수로 만든다. C, C++외 다른 언어에서는 const외 readonly, final과 같은 유사한것들도 있다. int const, const int const는 위치가 가변적이며 int const는 const int와 같다. 편하게 int를 썼을 뿐 특정 자료형과 관련이 있지는 않다. char const, const char도 마찬가지다. int const *, int * const 포인터 … Read more

[C, C++] 시간측정 함수 clock

clock 함수 프로그램이 실행되면 0부터 1ms당 1씩 clock이 계속 증가하고 있으며, clock()을 호출할 때 현재 clock(현재까지 증가된 clock)을 얻어올 수 있다. 즉 clock()으로 호출된 결과는 호출된 시점에서의 프로그램 실행시간이다. 이를 이용해서 특정 구간 시작과 끝 clock의 차이를 얻어오면 그 구간의 실행시간을 측정할 수 있다. RTOS/임베디드 시스템에서의 clock 함수 RTOS에서는 clock 함수 사용시 주의가 필요하다. 하드웨어와 … Read more

[C, C++] #ifdef, #if defined() 활용

소프트웨어가 업데이트될 때, 당장 사용하지 않지만 언제 재사용될지 몰라서 남겨둬야 하는 코드들이 있거나, 하나의 소스코드를 국가마다 언어를 다르게 하고싶다거나 할때 이런 경우 #if, #if defined와 같은 전처리기가 유용하게 활용된다. 클린코드인가 어디선가 사용하지 않는 코드나 주석은 남기지 말고 지우라지만 안쓰기가 쉽지않다. 그런데 확실히 ifdef가 많으면 코드가 지저분해지는건 어쩔수가 없다. #ifdef #ifdef는 #define으로 정의된 매크로와 함께 쓰이는데, … Read more