首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Visual中编译gcc代码会导致错误C3646:‘__属性_’:未知覆盖说明符

在Visual中编译gcc代码会导致错误C3646:‘__属性_’:未知覆盖说明符
EN

Stack Overflow用户
提问于 2015-10-03 13:27:57
回答 1查看 2.7K关注 0票数 2

我得到了以下错误:

错误C3646:‘__属性__’:未知覆盖说明符

代码:

代码语言:javascript
复制
LEMUR_PREALIGN char _stack[ sizeof(_Type) * _Count ] LEMUR_POSTALIGN;

完全错误:

1>c:\program文件\indri\indri 5.9\include\indri\greedy_vector(52):错误C3646:‘__属性_’:未知覆盖说明符

附加信息:我试图在Visual项目中使用indri.lib。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-03 15:30:44

__attribute__命令是gcc特定于编译器的命令。它在这个文件的第52行与命令一起使用,其中:

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

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

  1. __declspec(align(#))不支持defaulted:__attribute__ ((aligned))行为,该行为将:

将类型对齐到正在为其编译的目标计算机的最大有用对齐方式。

  1. __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并编写自己的__declspec(align(#))的行来进行__declspec(align(#))编程。

有关更多信息,请参见:GCC对MSVC类包装和对齐

在对lemur_platform.h做了更多的研究之后,看起来代码已经为您完成了所有上述工作!您会注意到,#define LEMUR_POSTALIGN __attribute__ ((aligned))封装在#ifndef WIN32中。因此,您需要做的是在Visual项目中定义WIN32

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32923135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档