[C, C++] hex to int와 c++에서 hex 출력

C의 printf로 hex값을 int로 출력 C에서 헥사값(hex)를 정수(int)로 print하는건 매우 간단하다. 일반적으로 printf에서 정수를 출력하기 위해 사용하는 출력문자를 %d 대신 %x로 사용하면 된다. C++의 cout에서도 출력될까? C++의 iostream에는 출력함수로 cout을 제공한다. 그런데 cout에서 0x78을 그대로 출력하면 정상적으로 출력되지 않는다. Hex to Int hex값을 그대로 cout으로 출력하면 정상적이지 않지만 static_cast로 타입캐스팅을 하면 정상적으로 출력할 수 있다. … Read more

[C, C++] Hex값 두개 합치기(비트연산)

왜 Hex두개를 합쳐야 할까 하나의 패킷에 자료 1~5까지의 데이터가 담겨서 통신을 해야한다. 이때 자료 4는 16비트가 필요하고 나머지는 8비트만 있어도 충분하다. 이런경우 자료 4를 8비트 두개로 쪼개서 보내는 경우가 있다. 쪼개는 방법이야 다양하겠지만 자료4의 값이 0x1234라면 0x12와 0x34로 쪼개서 보내는 경우가 경험상 많았다. 그래서 자료를 받는 쪽에서는 0x12와 0x34를 다시 0x1234로 만들어야 한다. Hex 두개 … Read more

[C, C++] extern “C” 의미

C와 C++간의 함수 호출 C에서 C++ 함수를 호출할 수 있고, C++에서 C함수를 호출할 수 있다. 그러나 단순히 일반적인 방법으로 호출할 경우 문제가 발생할 수 있다. C에서는 함수명이 다르면 다른 함수지만 C++에서는 함수 오버로딩을 지원하기 때문에 함수명이 같아도 다른 함수일 수 있다. 예를 들어 fun(int a)와 fun(int a, int b)는 다른 함수다. 따라서 C++ 컴파일러는 C와같이 … Read more

[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