Этот вопрос специфичен для компилятора MSVC (в частности, 2008), но я также заинтересован в ответах, отличных от компилятора.
Я пытаюсь выяснить, как выровнять буфер char в стеке, основываясь на выравнивании некоторого произвольного типа. В идеале код будет читать:
__declspec( align( __alignof(MyType) ) ) char buffer[16*sizeof(MyType)];
К сожалению, это не работает
ошибка C2059: синтаксическая ошибка: '__builtin_alignof'
Компилятор просто не любит вложенные операторы.
Моя единственная идея - сделать это:
char buffer[16*sizeof(MyType)+__alignof(MyType)-1];
char * alignedBuffer = (char*)((((unsigned long)buffer) + __alignof(MyType)-1)&~(__alignof(MyType)-1));
Кто-нибудь знает, что лучше? Кажется, что функция declspec должна работать, просто я имею синтаксис неправильно или что-то в этом роде?
Спасибо за чтение:)