我收到以下错误:
错误C3646:' __ attribute __':未知覆盖说明符
代码:
LEMUR_PREALIGN char _stack[ sizeof(_Type) * _Count ] LEMUR_POSTALIGN;
完成错误:
1> c:\ program files \ indri \ indri 5.9 \ include \ indri \ greedy_vector(52):错误C3646:' __ attribute __&#39 ;:未知覆盖说明符
其他信息:我正在尝试在Visual Studio项目中使用indri.lib。
答案 0 :(得分:2)
__attribute__
命令是gcc的编译器特定命令。它在this file的第52行和((align))
command上使用,其中:
指定指定类型
的变量的最小对齐(以字节为单位)
Visual Studio确实有一个类似的对齐命令:align
。但有两个问题:
__declspec(align(#))
不支持违约:__attribute__ ((aligned))
行为:将类型与要编译的目标机器的最大有用对齐方式对齐
__declspec(align(#))
是前缀。 __attribute__((aligned(#)))
是后缀。这意味着您的实际代码需要在展示位置上有所不同: struct S { short f[3]; } __attribute__ ((aligned)); // gcc alignment definition
__declspec(align(16)) strict S { short f[3]; }; // MSVC alignment
关键在于,#ifdef
编译器可能会更好地使用__attribute__ ((aligned))
和烹饪您自己的__declspec(align(#))
的任何一行。
有关详细信息,请参阅:GCC vs MSVC class packing and alignment
经过对lemur_platform.h的更多研究后,看起来代码已经为您完成了上述所有工作!您会注意到#define LEMUR_POSTALIGN __attribute__ ((aligned))
包含在#ifndef WIN32
中。所以你需要做的是在Visual Studio项目中定义WIN32
!