0%

How to use Pragma

해당 포스팅은 전처리 구문 중 하나인 #Pragma를 사용하는 방식에 대한 정리 글입니다.

Prama??

#Prama는 define 이나 include와 같이 #으로 시작하는 전처리 구문(Precompipler)의 하나라고 합니다.

MSVC(컴파일러)에만 존재하는 종송적인 명령어이므로, 컴파일러에 직접 정보를 전하기 위해서 사용된다고 합니다. 그래서 컴파일러를 변경했을 경우 실행을 보장을 하지 못한다고 합니다.

1. #pragma once

#pragma once는 컴파일러에게 한번만 컴파일 하라고 알려주는 전처리 구문이다. #define으로 각 헤더에 최소 값을 정의 해서 한번만 컴파일 되도록 했다.

1
2
3
4
5
6
7
// #pragma once 방법
#pragma once

// #define 방법
#ifndef _HEADER_H_
#define _HEADER_H_
#endif

2. #pragma comment()

#prgma comment(comment-type, comment string?) [] 안의 구문은 comment-type에 따라 필요한 경우에 사용한다고 합니다. comment-type에는 compiler, exestr, lib, linker, user 등이 올 수 있습니다.

  • subsystem 설정

프로젝트 관리에서 직접 서브 시스템을 바꿀 수도 있지만 #prgma comment() 방식을 이용해서도 변경이 가능하다.

1
2
#pragma comment(linker, "/subsystem:windows")
#pragma comment(linker, "/subsystem:console")
  • section 설정

코드 섹션, 데이터 섹션, init 섹션 등 다양한 섹션을 설정할 수 있습니다.

1
2
3
4
5
6
#pragma comment(linker, "SECTION:.SHARE,RWS")
#pragma data_seg(".SHARE")
...
공유하고 싶은 변수 목록 작성
...
#pragma data_seg()
  • 명시적(explicit) 라이브러리 링크 설정

명시적으로 라이브러리 링크를 설정하고 싶을 때, 원래대로 라면 프로젝트 관리 들어가서 링크 탭에서 링크 하고 싶은 라이브러리를 적어야 하지만, #pragma를 통해서 편하게 처리할 수 있습니다.

1
#pragma comment(lib, "Mylib.lib")

이것 이외에도 많은 방식으로 사용될 수 있다고 합니다. 해당 문서MSDN을 참고하면 됩니다.