-4

一个简单的问题:为什么 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 */
4

0 回答 0