我希望可以将alignas / _Alignas应用于整个结构声明,如下所示:
#include
#include
struct alignas(max_align_t) S {
int field;
};
struct S s = { 0 };
但gcc和clang都拒绝声明:
(gcc 6.3)
test.c:4:8: error: expected ‘{’ before ‘_Alignas’
struct alignas(max_align_t) S {
^
(铿锵3.8)
test.c:4:1: error: declaration of anonymous struct must be a definition
struct alignas(max_align_t) S {
^
是什么赋予了?请注意,如果我将文件编译为C,或者如果将alignas替换为等效的GCC扩展,则两个编译器都接受此构造,
struct __attribute__((aligned(__alignof__(max_align_t)))) S {
int field;
};
另请注意,alignas的其他合理位置,
alignas(max_align_t) struct S { ... };
struct S alignas(max_align_t) { ... };
struct S { ... } alignas(max_align_t);
也抛出语法错误(虽然不同).