구조체 정렬 크기를 조절하기 위한
#pragma pack(push, 정렬크기)
#pragma pack(pop)
에서, pragma pack이라는 이름과 이것의 용도(구조체 정렬 크기 설정) 가 직관적으로 연결이 잘 안 됩니다...ㅜㅜ
인터넷을 찾아봐도 찾기가 힘든데... pragma pack이라고 이름을 지은 이유가 있을까요??
알려주시면 감사히 배우겠습니다!
pragma는 pragmatic(실용적인)의 약어입니다.
#pragma는 컴파일러 지시문으로 쓰입니다. 컴파일러 제작사마다 고유의 확장 기능을 제공할 수 있고, 그런 기능을 이용할 때 쓰입니다. C 언어는 모든 경우에 대한 표준을 제시하지 않았고, 컴파일러 제작사가 알아서 정하라고 하는 경우가 많았습니다. 역사적으로는 모든 기능을 강제로 구현하라고 할만큼의 하드웨어 성능이 좋지 않은 경우도 많았기 때문입니다.
https://en.wikipedia.org/wiki/Directive_(programming)
In computer programming, a directive or pragma (from "pragmatic") is a language construct that specifies how a compiler (or other translator) should process its input. Directives are not[disputed – discuss] part of the grammar of a programming language, and may vary from compiler to compiler.
영문 위키피디아에는 자세한 설명이 나와 있습니다.
pack은 묶다라는 뜻이고, 묶어 놓은 것을 package 패키지라고 합니다.
구조체를 이런 크기로 묶어라 정도의 지시문으로 이해하면 됩니다. GCC/Clang, Visual Studio 등 컴파일러에 따라 이러한 지시문이 다르고, 표준으로 정해지지 않은 부분이 많아서 동작이 다른 경우가 흔합니다.
구조체 정렬은 반드시 익혀야 합니다. char는 1바이트인데 구조체 정렬이 되면 4바이트를 차지합니다. 프로그래머가 1바이트로 가정하고 구조체 정렬을 이해하지 못하고 프로그램을 짜면 문제가 발생하겠지요.