[C++구조체] #Pragma Once 사용, 헤더파일 안전하게 사용 1. 소개 헤더 파일은 프로그램에서 사용할 요소들을 미리 선언하고 정의한 내용을 담고 있습니다. 예를 들면, Class Template의 Layout 정보는 헤더 파일에 정의되어 있고(사용할 변수, 함수 등), Implementation File들은 실제로 함수와 변수들을 구현합니다. 2. #Pragma Once, 헤더 파일 Include .h나 .hpp의 확장자의 헤더 파일은 #include로 참조할 수 있고, .cpp 파일은 헤더 파일의 선언부 정의 내용을 담습니다. 아래는 선언 예입니다. 12#include "stdafx.h"#include cs 3. 두 가지 타입의 Include와 #Pragma Once 사용할 라이브러리는 한 ..
[C++구조체] #Pragma pack(1) 지시어 이해하기 Word Alignment(#pragma pack) Word Alignment(#pragma pack)는 어려운 개념은 아니지만, 매우 중요한 개념입니다. 우리는 하나의 word가 4바이트란 건 알고 있습니다. 메모리 주소 체계도 4바이트로 이뤄지며, 0x01ab23cd와 같은 값은 0x01, 0xab, 0x23, 0xcd로 각각 분리되어 저장되는 것도 알고 있죠. 알아야 #pragma pack도 이해할 수 있습니다. 그 저장되는 방법은 little Endian과 Big Endian으로 이 경우엔 0x01이 맨 뒤, 또는 맨 앞에 저장될 겁니다. 다소, 부정확한 의미가 될 순 있지만, 0x01이 저장된 주소가 N(1001) 번지라면 그다음 주소..
#ifndef, #define 사용법, 헤더 파일 중복 컴파일, 꼬임 방지 헤더 파일은 서브 시스템이나 다른 코드에 추상화된 인터페이스를 전달하는 메커니즘이다. 한 가지 까다로운 부분은 여러 헤더 파일을 이용할 때 순환 참조나 중복 인크루드되는 경우를 피하는 것이다. 이때 『#ifndef, #define』 사용법으로 해결할 수 있다. 이 두가지를 혼합해 헤더 파일이 중복 컴파일되는, 일명 헤더 파일 꼬임 방지도 할 수 있다. 예를 들어 Logger 클래스를 작성해서 모든 오류 메시지를 로깅해야 할 때, 사용자 설정 정보를 받기 위해 Preferences 클래스를 사용해야 할 수 있다. 그런데 Preferences 클래스가 사용하는 헤더 중에서 의도하지 않게 Logger 클래스를 인클루드 해버릴 수 있다...