_Alignof (since C11) (deprecated in C23) , alignof (since C23) operator
피연산자 타입의 정렬 요구 사항을 조회합니다.
목차 |
구문
_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 이후)
사용을 허용합니다.
키워드
예제
#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)
참고 항목
|
(C11)
|
다른 모든 스칼라 타입만큼 큰 정렬 요구 사항을 가진 타입
(typedef) |
| _Alignas (until C23) alignas (since C23) |
객체의 정렬 요구 사항을 설정함
(specifier) |
|
C++ documentation
for
alignof
operator
|
|