리버싱 핵심원리 책을 공부하면서 cpp 을 많이 해왔지만 모르는 전처리 지시자들이 종종 보인다. 그래서 정리하기로 했다.
#pragma comment(linker, "/INCLUDE:__tls_used")
- #pragma once 는 사용해 보았다. if - ifndef 로 double inclusion (헤더 중복 방지) 때 사용했다
Pragma
pragma 는 사전적 의미로 만능이라는 의미를 가진다. VS C++ 에서 컴파일러에게 그 뒤에 오는 내용에 따라 어떤 일을 하라는 전처리 명령어로 사용된다.
종류
#pragma once
#pragma comment(lib, “ws2_32”)
- obj 파일에 커맨트를 남기라는 명령어. 이 명령어는 linker가 그 obj 파일을 처리할 때 읽힌다. 특히, 이와 같은 경우는 해당 라이브러리를 library dependencies list 에 추가하라는 뜻이다.
- 프로젝트 속성 창 → linker → input → additional dependencies 에서 추가하는 것과 같은 기능을 한다.
#pragma pack(n)
- n에 1, 2, 4, 8 등이 올 수 있으며 이는 네트워크 통신을 개발할 때 구조체 멤버들을 align 하는데 사용된다.
- 네트워크로 국한되어 있지는 않고 메모리 align 을 무슨 기준으로 할것인지를 정하는 키워드이다.
- arm processor 에서 진짜 memory alignment 가 강제성을 가지는지 테스트 해볼때 사용했다.
#pragma warning
컴파일시에 어떤 조건(#if, ifndef)에 의해 개발자에게 어떤 것을 알려주고 싶을 경우 사용한다.