Tag: typedef

与C中的typedef和指针混淆

可能重复: Typedef指针好主意? 我对以下内容感到困惑: typedef struct body *headerptr; 现在,当我创建类型headptr指向结构体的东西时,创建一个新的headerptr将如下(我不确定我是否正确地执行此操作): headerptr newHeadptr; 我是否正确地假设这将是一个指向结构体的指针?

在C中键入命名空间

我已经在SO中读到了C中定义类型的不同命名空间,例如,Structs和Unions有一个命名空间,typedef有一个命名空间。 命名空间是这个的确切名称吗? C中存在多少个命名空间?

使用typedef结构时,错误’类型为“X *”的值无法分配给“X *”类型的实体

这是我用于节点的结构… typedef struct { struct Node* next; struct Node* previous; void* data; } Node; 这是我用来链接它们的function void linkNodes(Node* first, Node* second) { if (first != NULL) first->next = second; if (second != NULL) second->previous = first; } 现在,visual studio正在给我这些行上的intellisense(less)错误 IntelliSense: a value of type “Node *” cannot be assigned to an entity of type “Node *” […]

解释qsort库中使用的函数的typedef

我正在使用qsort库函数对结构元素数组进行排序,而在Internet上搜索时我找到了一个资源: INFO:使用C qsort()函数 @support.microsoft 对结构进行排序 。 我知道qsort函数需要通用指针进行类型转换。 但是我无法得到这一行: typedef int (*compfn) (const void*, const void*); 已经宣布的,以及随后的电话: qsort((void *) &array, // Beginning address of array 10, // Number of elements in array sizeof(struct animal), // Size of each element (compfn)compare // Pointer to compare function ); typedef是如何表现的,我的意思是我们究竟有什么类型的intdeffed int (*compfn)或int (compfn) ? 如果是前者,那么不应该调用(*compfn) ?

C中的结构混淆

所以我正在浏览这个C教程 ,我找到了这些代码行: struct Monster { Object proto; int hit_points; }; typedef struct Monster Monster; 而且我认为如果是这样的话会更有意义: typedef struct { Object proto; int hit_points; } Monster; 我可能完全错了,因为我对C很新,但我会假设这两段代码都会做同样的事情。 他们这样做了,那么有什么理由更喜欢一个而不是另一个? 或者如果它们不同,是什么让它们与众不同? 谢谢!

typedef with restrict关键字

我定义了像这样的对齐浮点数 typedef __attribute((aligned(64))) float aligned_float; 然后我用这样的restrict关键字定义对齐的浮点数 typedef aligned_float * restrict aligned_floatptr; 这与我期望的一样。 但由于我几乎总是想要这两个在一起,所以我尝试将typedef放在一行中 typedef __attribute((aligned(64))) float * restrict aligned_floatptr2 但是,这不起作用。 仍然可以识别restrict关键字,但不会对齐。 然而,编译器没有给我任何警告。 我只是通过查看组件才意识到对齐不起作用。 为什么组合定义不起作用,为什么我不收到警告? 你可以在这里看到Clang和GCC的组件。 我想这样做的原因是我有这样的代码 static void kernel(float * restrict a, float * restrict b, float * restrict c, int n) { a = __builtin_assume_aligned(a, 64); b = __builtin_assume_aligned(b, 64); c = __builtin_assume_aligned(c, 64); […]

在定义结构时避免“重新定义typedef”警告

我正在定义一些引用彼此的结构,并在使用它们之前键入结构,因此每个结构都“了解”其他结构(没有这个就得到了编译错误)。 不确定这是否必要或正确。 现在用gcc编译时,我正在“重新定义typedef”警告。 这是怎样的正确方法? typedef struct a A; typedef struct b B; typedef struct c C; struct a { B* list; A* parent; }; struct b { A* current; B* next; }; struct c { A* current; A* root; }; 更新:愚蠢,错误的复制粘贴导致此标头被包含在另一个文件中两次。 我是C的新手,并认为它必须与文件中的结构两次有关。 谢谢@Kevin Ballard的提醒。

被#define和typedef混淆

#define T Stack_T typedef struct T *T; 那么struct T是什么意思,# #define或typedef定义的那个?

为什么为结构使用不同的标记和typedef?

在C代码中,我看到了以下内容: typedef struct SomeStructTag { // struct members } SomeStruct; 我不清楚为什么这有什么不同: typedef struct SomeStruct { // struct members } SomeStruct; 使用特定名称的类型和类型将其定义为不同的类型名称有什么意义?

用struct 理解typedef

我很难理解这段代码: typedef struct node { int data; struct node * next; } node; typedef node * nodepointer; 所以,我们正在使用typedef构建struct节点…我假设我们这样做是为了初始化struct而不需要“struct”关键字。 我想问一下为什么在struct定义中我们使用名称“node” 两次 (在开始和结束时)。 其次是typedef node * nodepointer; 指着。 在这种情况下是否有必要使用typedef? 这个表达式是node * nodepointer; 不平等?