ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.