- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我编译以下代码时:
#include <sys/time.h>
#include <stdio.h>
struct TupleHeader {
timeval tuple_stime; // 34..37
}__attribute__((__packed__));
void set_value(timeval& stime){
}
int main(){
TupleHeader tuple;
set_value(tuple.tuple_stime);
return 0;
}
我得到了 g++-3.4.2
下的错误和 g++-4.8.3
:
attribute-1.cc: In function `int main()':
attribute-1.cc:13: error: cannot bind packed field `tuple.TupleHeader::tuple_stime' to `timeval&'
在我定义了timeval
之后我自己如下并改变了所有timevals
在上面的代码中变成timeval2
:
struct timeval2
{
__time_t tv_sec;
__suseconds_t tv_usec;
}__attribute__((__packed__));
错误消失了,但我不想定义 <bits/time.h>
中已经存在的结构.还有哪些其他方法可以更正此错误?非常感谢!
最佳答案
这取决于你想要什么。如果你希望内部 timeval 也被紧包,重复结构声明几乎是你唯一的选择:默认打包结构和紧包结构具有相同名称的成员,但打包的不同使得它们根本不同的类型。 (FWIW,既然你显然是想节省空间,你可以借此机会把它变成一个位域,并且只分配 tv_usec
二十位!)
另一方面,如果您不关心 timeval 内是否存在填充 - 仅在它和其他结构之间 - 您的另一个选择是将其声明为 char tuple_stime[sizeof(timeval )]
代替,并根据需要进行转换。 (不要忘记别名问题。)
关于c++ - 关于 __attribute__((__packed__)) 的 c++ 编译错误还有哪些其他方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669751/
我有一个目前正在用 C 编写的应用程序,其中我在作为项目一部分的库中声明了几个 TLS 静态全局变量。 TLS 变量是使用 gcc 的 __thread 指令声明的。 我想知道我是否可以使用 .cto
如果 C++ 类构造函数只能通过其参数访问数据,那么它们是否可以并且应该声明为 __attribute__((pure))?在什么情况下它们应该被限定为 __attribute__((const))?
遵循 GCC __attribute__(packed) 将打包到字节边界,对齐用于此目的:-- u8 rx_buf[14] __attribute__((aligned(8))); struct
__attribute__((const)) 和 GNU C 中的 __attribute__((pure)) 有什么区别? __attribute__((const)) int f() {
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我想利用 GCC 的可见性属性。 为此,在我的可执行文件中,我有一个函数,我希望它对任何插件都可见,这样它们就可以使用它来注册自己。因此,我在其上使用 __attribute__((visibilit
有时我会出于各种原因围绕 printf 风格的函数编写包装器,我真的很喜欢让 clang 告诉我格式说明符和实际参数之间的类型不匹配。考虑: #include #include static __
我对以下代码行有疑问: char buffer[256] __attribute__((aligned(4096))); 全局数组“缓冲区”的内容是字符串,我从标准输入中获取。我读过https://g
在gcc documentation它们提供有关整数如何对齐的信息。 打包整数可以做同样的事情吗? 例如,这在不会自动处理不正确对齐数据的系统上有效吗? typedef uint16_t __attr
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: GCC __attribute__((aligned(x)) explanation What is mea
__attribute__ 指令是否适用于一行中声明的所有成员? int a, b, c; 声明三个 int 变量。 int *a, b, c; 将变量“a”声明为指向 int 的指针,将 b 和 c
在使用 gcc __attribute__ 函数时,我注意到代码生成存在差异,具体取决于我放置属性的位置。在下面的示例中,我希望编译器不要优化我对 use() 的调用。 编译器:x86-64 gcc(
为什么gcc需要__attribute__((__malloc__))?难道不应该通过将 malloc (和类似的函数)声明为返回 restricted 指针来传达相同的信息 (void *restr
我得到了一段将 __attribute__((const)) 应用于某些函数的代码。现在,我宁愿在它可用时不删除它,但另一方面,我确实想要更便携,所以 - 我想说 #if some condition
我可能对 weak 理解有误: 我的情况: 具有一些弱回调的“物理层” 实现这些回调的“框架层”,并为应用层提供新的 WEAK 回调 主要 - 应用层。 phy.h #pragma once void
我知道从C编程语言的角度main() 是程序的入口点。 但从操作系统的角度来看,__start 位于 ctrt0 启动例程,它链接到一个程序中,该程序在调用程序的 main() 函数(如有错误请指正)
这几天一直让我抓狂。如果我将数组声明为 static,则无法让数组对齐 16。 非常感谢任何帮助。 修订版: #include #include #define MAX_INPUTS 250 in
我正在尝试在 android NDK 上进行开发。我实际上有一个带有模块的项目+子文件夹(编译为静态库)并与主项目文件(libs .a + main object .o --> 可执行文件)链接在一起
这个问题在这里已经有了答案: Is there a standard "never returns" attribute for C# functions? (10 个答案) 关闭 8 年前。 C#
__attribute__ ((__packed__)) 对嵌套结构有什么影响?例如: // C version struct __attribute__ ((__packed__)) { s
我是一名优秀的程序员,十分优秀!