Где разместить __attribute__ ((выровненный)) с помощью typedef: ed struct?

У меня есть информация Googled о gcc __attribute__ ((aligned)), чтобы узнать больше об использовании этого атрибута.

В соответствии с GNU "Вы можете указать атрибуты aligned и transparent_union либо в объявлении typedef, либо только за закрывающей фигурной скобкой полного определения перечисления, структуры или типа объединения и упакованного атрибута только за закрывающей скобкой определения". Кроме того, в документе показан следующий пример:

struct S { short f[3]; } __attribute__ ((aligned (8)));

Но я нашел несколько примеров с "typedef struct". Я нашел следующие два:

typedef struct __attribute__ ((aligned)) { char a; int x; } foo;
typedef struct { char a; int x; } __attribute__ ((aligned)) foo;

Какой предпочтительный метод: атрибут после struct и до {, или атрибут после } и перед foo?

Они оба доставляют одинаковый результат?

Я бы очень признателен за дополнительную информацию о правильном использовании __attribute__ ((aligned)) с помощью команды typedef: ed.

Ответ 1

Из GCC doc:

Для типа перечисления, структуры или объединения вы могут указывать атрибуты либо между тег enum, struct или union и имя типа или просто мимо закрывая фигурные скобки определения. Предпочтительный прежний синтаксис.