#pragma 지시자
컴파일러에게 ~하게 컴파일해달라고 지시할 수 있는 pragma 지시자에 대해 알아보자.
#pragma once
할때 그 pragma 맞음. 원래 pragma once는 표준이 아니었다. 하지만 이제 많은 컴파일러에서 지원해줌.
라이브러리들을 보면 이 지시자를 볼 수 있다.
pragma once와 inndef~endif 두가지의 헤더가드를 사용하는 라이브러리도 많다.
#pragma
지시자는 다음의 형식을 갖는다.
#pragma tokens
(Eg : once)
pragma는 컴파일러마다 다른 동작을 함. 알아두어야 한다. 전부다 소개하긴 힘들고.. 마이크로소프트에서 제공하는 기능을 보자.
Pragma 지시문 및 __pragma 및 _Pragma 키워드(keyword)
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의 결과가 나온다.
이제 pragma pack 지시자를 사용해보자.