Macro ALIGN (x) de plataforma cruzada?

Gostaria de criar umstruct que tem um certo alinhamento.

Gostaria de usar a mesma definição de estrutura para os compiladores GCC e VisualC +

No VisualC ++, normalmente se faz isso:

__declspec(align(32))
struct MyStruct
{
// ...
};

No GCC, normalmente se faz isso:

struct MyStruct
{
// ...
} __attribute__ ((aligned (32)));

claro que eu poderia criar as macros apropriadas para fazer isso funciona

BEGIN_ALIGNED_STRUCT(32)
struct
{
// ...
}
END_ALIGNED_STRUCT(32)
;

E, assim, conseguir lidar com os dois casos de forma transparente, mas aqui eu tenho que duplicar a constante de alinhamento 32), que eu gostaria de evita

ma alternativa no GCC é colocar o__attribute__ após a tag struct, conforme mencionado emthe docs, igual a

struct __attribute__ ((aligned (32))) MyStruct
{
// ...
};

E assim eu poderia fazer esse tipo de sintaxe funcionar:

ALIGNED_STRUCT(32) MyStruct
{
// ...
};

Alguém tem alguma versão melhor? Outras idéias? Tentei pesquisar um pouco de código, mas não achei nada muito promisso

Atualizar Com base no comentário de John, aqui está outra versão que poderia funcionar (eu não a compilei, mas os documentos indicam que é uma boa idéia)

struct MyStruct_Unaligned
{
// ...
};

TYPEDEF_ALIGNED(32, MyStruct_Unaligned, MyStruct);

// Would expand to one of:
// 
// typedef __declspec(align(32)) MyStruct_Unaligned MyStruct;
//
// typedef struct __attribute__ ((aligned (32))) MyStruct_Unaligned MyStruct

questionAnswers(2)

yourAnswerToTheQuestion