[C, C++] 정적변수와 전역변수 비교(static, global)

정적변수(static variable) 정적변수는 선언 위치에 따라 활용도가 다르며 변수 앞에 static을 붙여서 선언한다. 함수 외부에 선언 함수 외부에 선언한 정적변수는 선언한 파일에서만 호출이 가능하다. 즉, 선언한 파일 내부의 함수들은 사용 가능하지만 선언한 파일 외부의 함수들은 사용이 불가능하다. 전역변수가 extern 키워드로 다른 파일에서 호출이 가능한 것과는 다르다. 함수 내부에 선언 함수 내부에 선언된 지역변수는 함수가 소멸시 … Read more

[C, C++] 구조체 배열 멤버 memset으로 초기화

memset 배열을 -1, 0, 1로 초기화가 필요할 때 memset을 이용하면 깔끔하고 편하다. 이전에 memset을 이용하여 배열 초기화 하는 방법을 작성한적이 있는데, 구조체의 멤버로 존재하는 배열의 초기화도 필요해서 추가 작성하게 되었다. [C, C++] memset을 이용한 정수배열 초기화 구현 헤더파일 memset 기본형 동적할당 구조체의 memset 예제 배열은 포인터이고 구조체의 멤버로 들어가도 마찬가지다. 따라서 &연산자가 필요하지 않다. 동적할당이므로 … Read more

[C, C++] 정적(static)함수의 사용 이유

정적 함수로 만들어주는 static 함수를 정의할 때 static을 붙이면 해당 함수는 다른 파일에서 호출하지 못하는 정적함수가 된다. 내가 겪은 정적함수를 사용하는 이유는 다음과 같다. 코드 안정화 선임중에 다른 파일에서 사용하지 않는 모든 함수는 static을 붙이는 분이 계셨다. 이렇게 함으로써 다른 파일에서 의도치 않게 어떤 함수를 호출하는 경우를 막는다. 하나의 예를 들자면, a파일을 A가 개발하고 b파일을 … Read more

[C, C++] typedef struct의 포인터 별칭(alias)

다른 글 [C, C++] typedef 사용 이유 typedef로 정의한 구조체의 포인터 별칭 아래 코드와 같이 typedef로 정의한 구조체의 별칭에 포인터가 추가적으로 존재하는것을 여러 소스코드에서 종종 볼 수 있다. typedef struct는 여러개의 별칭을 가질 수 있다. typedef를 사용하여 구조체를 선언할 때 struct를 생략했듯이 포인터 별칭을 두게 되면 포인터 구조체를 선언할 때 간편하다.

[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