Tag: typedef

在Python CFFI中声明包含time_t字段的struct

我正在使用CFFI从Python调用一个返回结构的C函数。 结构使用time_t元素定义。 如何将结构声明为CFFI,以便我可以从Python访问它? 例如,我尝试了以下(获取文件的修改时间): import cffi ffi = cffi.FFI() ffi.cdef(“”” // From POSIX struct timespec { time_t tv_sec; long tv_nsec; …; }; struct stat { struct timespec st_mtim; …; }; // From “man 2 lstat” int lstat(const char *path, struct stat *buf); “””) stat = ffi.verify(“#include “) 这给出了一个错误: cffi.api.CDefError: cannot parse ” time_t tv_sec;” :5: […]

代表一个指针

如果ListofChar是一个指向Char的指针(不要与char混淆),它表示struct charact , 那么什么是void report(ListofChar chars) ? chars是否只代表指针ListofChar ? #include #include struct charact { char ch; int occurs; struct charact *next; }; typedef struct charact Char; typedef Char * ListofChar; typedef Char * CharNode_ptr; void letters(char name[50], ListofChar * chars_ptr); void report(ListofChar chars); Char * createnode(char ch); int main() { char name[50]; ListofChar chars = […]

这种类型的意思是什么?

我是C的新手,这种typedef对我来说有点奇怪。 有人可以解释它的作用吗? typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list); 它位于头文件中。

为什么内部结构中不允许使用typedef?

我有一个程序,在现有的typedef结构中定义一个typedef结构,我想知道为什么我得到一个编译错误。 这是程序: typedef struct Outer { typedef struct Inner { int b; }INNER; INNER inner; int a; }OUTER; int main() { OUTER obj; obj.a = 10; obj.inner.b=8; return 0; } 在编译时给出以下错误:: test.c:3:5: error:expected specifier-qualifier-list before ‘typedef’ test.c: In function ‘main’: test.c:17:5: error: ‘OUTER’ has no member named ‘a’ test.c:18:5: error: ‘OUTER’ has no member named […]

C:typedef union

在相关问题中找不到任何相关内容。 最有可能的是它的超级菜鸟,但无论如何我都会问/我的.h文件中有以下内容: typedef union _API_Packet_0x90{ uint8_t packet[26]; struct _pack_struct { uint8_t start; uint8_t length[2]; uint8_t addr64[8]; uint8_t addr16[2]; uint8_t options; uint8_t rfData[4]; uint8_t chksum; }; } API_Packet_0x90; API_Packet_0x90 ap90; 这是微控制器的代码,我使用的是xc8工具链(以前的Hi Tech C)。 编译器说: xbee_api.h:19:警告:缺少基本类型; int假设 xbee_api.h:19:错误:“;” 预期 xbee_api.h:19:警告:缺少基本类型; int假设 xbee_api.h:21:警告:缺少基本类型; int假设 ,这继续(错误太多) 我认为这是uint8_t,所以我添加了#include 。 不。 我以为这是关于名字的,所以我尝试了各种各样的戏剧,比如 typedef union { uint8_t packet[26]; struct _pack_struct { }; […]

C typedef名称冲突

我有两个头文件,我包含两个都具有相同名称的typedef。 我们来说aaa.h和bbb.h. 它们来自2个不相关的第三方软件包,我无法控制这两个文件,但必须使用它们。 我没有直接包含这两个文件,但它们相当包含在顶级头文件中。 (即我包括分别包含它们的ah和bh) 由于名称冲突,我的程序不会被编译。 所以我的临时解决方案是将aaa.h复制到我的源代码树中,只删除了typedef,名为myaaa.h。 在文件的顶部,我保留了“#ifndef AAA_H,#define AAA_H”包装器,所以当我包含myaaa.h时,由于已经定义了AAA_H标志,因此不会包含aaa.h,间接删除了typedef冲突。 有没有一个更聪明的方法来做这个而不添加这样的文件(我必须对它进行版本控制)到我的源代码? 谢谢!

`typedef struct foo {int bar};`的合法性

这个问题来自问题是结构{…}; 一个类型或一个未命名的变量? 在那个问题上,OP问了一下 typedef struct student_s { char* name; int age; double height; struct student_s* next; }; 我问的是上述的合法性。 当编译包含上述代码的代码时,是否需要诊断(或使其更简单, typedef struct foo {int bar;}; )? 我的看法是合法的,从语言律师的角度来看,不需要诊断。 (旁白:我不主张使用它。它非常值得诊断。如果我错误地编写了如上所述的代码,我非常希望编译器警告我。) C11标准的第6.7节规定了声明的语法: declaration-specifiers init-declarator-list opt ; 请注意, init-declarator-list是可选的。 这可能导致人们认为typedef int; 已validation。 这不是因为标准也说明了这一点 除static_assert声明之外的声明应至少声明一个声明符(除函数的参数或结构或联合的成员之外),标记或枚举的成员。 因此typedef int; 和typedef struct {int bar}; 是非法的,因为他们没有声明声明者,标签或枚举成员。 另一方面,在我看来, typedef struct foo {int bar;}; 是合法的,因为它确实声明了一些东西。 特别是,它声明并定义了struct标签foo 。 […]

为什么结构名称应该有typedef?

我已经看到源代码总是有一个结构的typedef并使用相同的地方而不是直接使用结构名称作为“struct sname”等? 这背后的原因是什么? 这样做有什么好处吗?

防止使用整数进行自动转换

我正在开发一个音频应用程序(用C ++编写),我有很多相互调用的函数,它们可以采用帧数(即1个单声道或2个立体声浮点样本)或原始数量的样本…… 跟踪每个函数(样本或框架?)的语义以及何时通过nChannels跟踪多个或div,所以我想以某种方式做一个typedef samples_t和frames_t(到unsigned int)并让编译器帮助变得越来越困难我出去…… 是否有任何简单的方法可以将从frames_t到samples_t的隐式转换在C ++中标记为错误?

typedef with const且不带const限定符

typedef void* TVPtr; typedef const void* CTVPtr; const TVPtr func3 (const TVPtr p) { return p; } const void* func4 (const void* p) { return p; } CTVPtr func5 (CTVPtr p) { return p; } int main () { const uint64_t i = 10; func3(&i); // compilation error here // cannot convert argument 1 from […]