一个简单的问题:为什么 C 没有_Alignof unary-expression
?
这是无效的 C11 代码:
int x;
_Alignof x; // invalid
_Alignof(x); // invalid
注意:C++ 没有alignof unary-expression
. 这是无效的 C++ 代码:
int x;
alignof x; // invalid
alignof(x); // invalid
UPD。但是,C 编译器和 C++ 编译器可能支持它作为扩展,同时产生以下诊断:
# gcc
warning: ISO C does not allow '_Alignof (expression)'
# clang
warning: '_Alignof' applied to an expression is a GNU extension
# icc
warning #3464: the standard "alignof" operator does not accept an expression argument (use a type instead)
# msvc does not support this extension and detects the syntax error
error C2061: syntax error: identifier 'num'
# g++, clang++, icc/msvc (in C++ mode) produce the similar diagnostics
注意:C 的基本原理仅涵盖 C99,_Alignof
并已添加到 C11 中。
UPD2。
问:你会从这个功能中得到什么?
答:例如:能够查询使用对齐的数组对象的对齐方式_Alignas
。可以使用_Alignas
对齐说明符对齐数组对象。但是,没有(?)标准方法来查询此类数组对象的对齐方式。例子:
typedef char T[3];
_Alignas(8) T x;
int s1 = _Alignof(x); /* invalid */
int s2 = _Alignof x; /* invalid */