C++ 在Visual Studio中编译gcc代码会导致错误C3646:&x27__属性';:未知重写说明符

C++ 在Visual Studio中编译gcc代码会导致错误C3646:&x27__属性';:未知重写说明符,c++,visual-studio,gcc,msvc12,C++,Visual Studio,Gcc,Msvc12,我得到以下错误: 错误C3646:“\uuuuuuuuuuuuuuuuuu属性”:未知重写说明符 代码: 完全错误: 1> c:\program files\indri\indri 5.9\include\indri\greedy\u vector(52):错误C3646:“\uuu属性”:未知覆盖说明符 其他信息:我正在尝试在Visual Studio项目中使用indri.lib。该\uuuu属性\uuuu命令是gcc的编译器特定命令。它用于的第52行,其中: 为指定类型的变量指定最小对齐方式

我得到以下错误:

错误C3646:“\uuuuuuuuuuuuuuuuuu属性”:未知重写说明符

代码:

完全错误:

1> c:\program files\indri\indri 5.9\include\indri\greedy\u vector(52):错误C3646:“\uuu属性”:未知覆盖说明符


其他信息:我正在尝试在Visual Studio项目中使用indri.lib。

\uuuu属性\uuuu
命令是gcc的编译器特定命令。它用于的第52行,其中:

为指定类型的变量指定最小对齐方式(以字节为单位)

Visual studio实际上有一个类似的对齐命令:。但有两个问题:

  • \uu declspec(align(#))
    不支持默认的:
    \uu属性(aligned))
    行为,该行为将:
  • 将类型与您要编译的目标计算机的最大有用对齐方式对齐

  • \uu declspec(align(#))
    是一个前缀<代码>属性((对齐(#))是一个后缀。这意味着您的实际代码需要在位置上有所不同:
  • struct S{short f[3];}uuu属性uuu((对齐));//gcc路线定义
    __declspec(align(16))strict S{short f[3];};//MSVC校准

    这里的要点是,您最好使用
    #ifdef
    编译任何使用
    uuu属性((对齐))
    的行,然后编写自己的
    u declspec(对齐(#))

    有关更多信息,请参阅:



    在对lemur_platform.h进行了更多的研究之后,代码似乎已经为您完成了上述所有工作!您会注意到,
    #define LEMUR\u POSTALIGN\uuu属性u((对齐))
    被包装在一个
    #ifndef WIN32
    中。因此,您需要做的是在VisualStudio项目中定义
    WIN32

    你介意提供你的代码吗?应该是。你的标题和问题有不同的错误信息。
    LEMUR\u POSTALIGN
    是这个意思吗?若我并没有错的话,我认为win32是在VisualStudio项目中自动定义的。或者有什么具体的方法来定义win32吗?@asimseed我想你是在想
    \u win32
    ,这就是。您需要定义WIN32。我建议使用预处理器参数,这样您就可以将其放在项目代码中而不是代码中。要做到这一点,请使用指令。
    LEMUR_PREALIGN char _stack[ sizeof(_Type) * _Count ] LEMUR_POSTALIGN;