Namespaces
Variants

_Alignof (since C11) (deprecated in C23) , alignof (since C23) operator

From cppreference.net

피연산자 타입의 정렬 요구 사항을 조회합니다.

목차

구문

_Alignof( type-name ) (C11부터) (C23에서 사용 중단됨)
alignof( type-name ) (C23부터)

이 연산자는 일반적으로 헤더 <stdalign.h> 에 제공되는 편의 매크로 alignof 를 통해 사용됩니다.

(C23까지)

설명

type-name 으로 명명된 타입의 alignment requirement 를 반환합니다. 만약 type-name 이 배열 타입인 경우, 결과는 배열 요소 타입의 alignment requirement입니다. type-name 은 함수 타입이나 불완전 타입(incomplete type)일 수 없습니다.

결과는 size_t 타입의 정수 상수입니다.

피연산자는 평가되지 않습니다 (따라서 피연산자에 사용된 외부 식별자가 정의될 필요가 없습니다).

만약 type-name VLA 타입인 경우, 그 크기 표현식은 평가되지 않습니다.

참고 사항

일부 C 컴파일러에서는 비표준 확장으로 표현식과 함께 _Alignof (C23 이전) alignof (C23 이후) 사용을 허용합니다.

키워드

alignof , _Alignof

예제

#include <stdalign.h>
#include <stddef.h>
#include <stdio.h>
int main(void)
{
    printf("Alignment of char = %zu\n", alignof(char));
    printf("Alignment of max_align_t = %zu\n", alignof(max_align_t));
    printf("alignof(float[10]) = %zu\n", alignof(float[10]));
    printf("alignof(struct{char c; int n;}) = %zu\n",
            alignof(struct {char c; int n;}));
}

가능한 출력:

Alignment of char = 1
Alignment of max_align_t = 16
alignof(float[10]) = 4
alignof(struct{char c; int n;}) = 4

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
DR 494 C11 VLA의 크기 표현식이 _Alignof 에서 평가되는지 여부가 명시되지 않음 평가되지 않음

참조문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 6.5.3.4 sizeof 및 alignof 연산자 (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 6.5.3.4 sizeof 및 _Alignof 연산자 (p: 64-65)
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.5.3.4 sizeof 및 _Alignof 연산자 (p: 90-91)

참고 항목

다른 모든 스칼라 타입만큼 큰 정렬 요구 사항을 가진 타입
(typedef)
_Alignas (until C23) alignas (since C23) 객체의 정렬 요구 사항을 설정함
(specifier)
C++ documentation for alignof operator