2017-01-28 16 views
1

Я пытаюсь перенести некоторый код из Linux в Windows, и у меня проблемы.Портирование C++ с Linux на windows, '__aligned__'

Эта линия:

uint8_t patch_[patch_size_*patch_size_] __attribute__ ((aligned (16))); 

дает мне:

Error C3861 'aligned': identifier not found 

Error C3646 '__attribute__': unknown override specifier 

IS это проблема Linux к Windows? Я не могу найти определение для aligned или __attribute__ в любом месте.

(код Я пытаюсь порт: https://github.com/uzh-rpg/rpg_svo)

+0

https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html – melpomene

ответ

6

Это gcc для MSVC проблема. Согласно the documentation., Эквивалентная функция MSVC будет __declspec(align(16)).

Если ваш компилятор поддерживает C++ 11, вы также можете использовать объявление alignas.

+0

Спасибо! Я пробовал: 'uint8_t patch_ [patch_size_ * patch_size_] __declspec (align (16));' и он дает мне: 'expected a ';'', на '__declspec'. Что я делаю не так? – anti

+1

@anti Согласно статье [MSDN article] (https://msdn.microsoft.com/en-us/library/83ythb65.aspx), связанной с ответом, '__declspec' идет перед объявлением, так что это будет что-то например '__declspec (align (32)) uint8_t patch_ [patch_size_ * patch_size _];' – user4815162342

+0

Спасибо! Отлично. – anti