#pragma 지시자

컴파일러에게 ~하게 컴파일해달라고 지시할 수 있는 pragma 지시자에 대해 알아보자.

#pragma once할때 그 pragma 맞음. 원래 pragma once는 표준이 아니었다. 하지만 이제 많은 컴파일러에서 지원해줌.

라이브러리들을 보면 이 지시자를 볼 수 있다.

pragma once와 inndef~endif 두가지의 헤더가드를 사용하는 라이브러리도 많다.

#pragma 지시자는 다음의 형식을 갖는다.

#pragma tokens (Eg : once)

pragma는 컴파일러마다 다른 동작을 함. 알아두어야 한다. 전부다 소개하긴 힘들고.. 마이크로소프트에서 제공하는 기능을 보자.

Pragma 지시문 및 __pragma 및 _Pragma 키워드(keyword)

Untitled

token중 once는 거의 모든 컴파일러가 지원함.

대표적인 예시로… pragma pack을 보자. 이건 패딩하는 사이즈를 바꿔주는 전처리 지시자임. (예전에 비주얼 스튜디오 설정을 통해 바꾼 적이 있는 기능임)

struct s
{
	int i;
	char ch;
	double d;
};

int main()
{
	struct s A;
	printf("Size fo A is : %zd", sizeof(A));
}

간단한 구조체를 설정하고.. 크기를 보자.

아무것도 설정하지 않았을때는 패딩이 되어서 16의 결과가 나온다.

Untitled

이제 pragma pack 지시자를 사용해보자.