-
[C++] __attribute__ 에 대해서C++ 2024. 6. 27. 17:15
__attribute__란?
단어 그대로 속성을 부여해주는 기능
C, C++에서 컴파일러에게 추가정보를 제공하여 코드의 동작을 세밀하게 제어할 수 있도록 하는 기능이다.
함수, 변수, 구조체 등에게 사용가능
쉽게 말해서 컴파일러에게 "이것(함수, 변수, 구조체.. ) 좀 이러이러하게 처리해주세요~" 하는 특별한 지시어이다.
주로 사용되는 속성
- aligned(n): 변수가 n 바이트 경계에 맞춰서 배치되도록 함
- packed: 구조체의 멤버 사이에 패딩을 추가하지 않고 연속적으로 배치
- noreturn: 함수가 반환하지 않음을 알려주는 속성
- deprecated: 해당 함수나 변수를 더 이상 사용하지 않도록 하는 속성
함수에 사용할 때
함수가 반환하지 않음을 컴파일러에게 알려주는 속성인 'noreturn' 의 예시,
함수가 끝나면 프로그램이 종료되거나 예외가 발생하다는 것을 의미
#include <cstdlib> // 함수 앞에 [[noreturn]] [[noreturn]] void my_exit_function() { std::exit(1); } int main() { my_exit_function(); // 이 아래 코드는 실행되지 않음 }
변수에 사용할 때
변수가 메모리에서 특정한 경계에 맞춰서 배치되도록 하는 속성인 'aligned' 의 예시
// x는 16바이트 경계에 맞춰서 배치 int x __attribute__((aligned(16)));
구조체에 사용할 때
구조체 멤버들이 연속적으로 배치되도록해서 멤버 사이에 패딩을 추가하지 않게하는 속성인 'packed' 의 예시
struct __attribute__((packed)) MyPackedStruct { char a; int b; short c; };
아래 처럼 'packed + aligned' 으로 사용할 수도 있다.
#define PACK1BYTE __attribute__((packed, aligned(1))) struct PACK1BYTE OneBytePackedStruct { char a; int b; short c; };
'C++' 카테고리의 다른 글
[C++] #pragma 란? (0) 2024.06.27 [C++] Boost MSM(Meta State Machine) 이란? (0) 2024.05.24