首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用clang和C11的结构成员的_Alignas

使用clang和C11的结构成员的_Alignas
EN

Stack Overflow用户
提问于 2013-02-23 02:44:20
回答 1查看 3.7K关注 0票数 6

我在使用C11和结构的-Wpadded时遇到了一些问题。

我已经读过Structure member alignment with _Alignas了,我看了一下clang文档,发现它现在被支持了。

另外,我正在使用一个非常新的clang版本,它是我最近从主干上构建的。

代码语言:javascript
复制
$ clang --version
clang version 3.3 (trunk 175473)
Target: x86_64-unknown-linux-gnu
Thread model: posix

我遇到的问题是:

代码语言:javascript
复制
#include <stdlib.h>
#include <stdalign.h>

struct foo{
   void* a;
   int b;
};

int main() {
   struct foo instance;

   instance.a = NULL;
   instance.b = 2;

   return 0;
}

这给了我一个警告:

代码语言:javascript
复制
$ clang -Weverything -std=c11 t.c 
t.c:4:8: warning: padding size of 'struct foo' with 4 bytes to alignment boundary [-Wpadded]
struct foo{
       ^
1 warning generated.

这不就是_Alignas的作用吗?我试着把它放在int成员声明之前,如下所示:

代码语言:javascript
复制
struct foo{
   void* a;
   _Alignas(void*) int b;
};

但同样的警告依然存在。我也尝试过将_Alignas放在不同的地方,但都无济于事。这里我漏掉了什么?

我知道我可以忽略这个特殊的警告,我理解为什么填充很重要,所以我对什么是填充的变通或解释不感兴趣。我想知道如何以一种可移植的、符合标准的方式更改我的C语言,以便不再发出警告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-23 02:51:21

-Weverything打印C语言所需的所有诊断消息以及C语言不需要的一些诊断信息。此处打印的诊断信息不是C语言所必需的:它的目的是提供信息,并且您的程序已经完全符合要求。C表示,实现可以自由生成额外的诊断消息,只要它不会失败地翻译程序即可。

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

https://stackoverflow.com/questions/15031061

复制
相关文章

相似问题

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