Tag: typedef

C样式/ C ++的正确性,是struct / union / enum标签与类型名称相同吗?

以下MyStruct(标记MyStruct)的定义和MyStruct类型的类型定义似乎完全可以通过gcc(至少4.6.2)和g ++来完成。 typedef struct MyStruct { int a; int b; } MyStruct; 我的问题是:它是否容易出错(在C和/或C ++中)或使用标签名称与类型名称相同的错误样式? 根据http://www.eetimes.com/discussion/programming-pointers/4024450/Tag-vs-Type-Names,它不是: 我永远不明白为什么他们为标签和typedef使用不同的名称时,一个名称就可以了: typedef struct tree_node tree_node; 但我经常看到代码样式如下: typedef struct tagMyStruct {…} MyStruct; typedef struct myStruct {…} MyStruct;` typedef struct _MyStruct {…} MyStruct; <是的,我知道下划线+大写字母 在每种情况下,有人在某种程度上使标签名称与类型名称不同 。 它背后有什么实际原因吗? 旁注:我使用的是C ++编译器,但我想与这些定义C兼容(我知道这对c ++来说是不好的风格)。 出于维护某些调试工具的可用性的原因,我需要所有标记名称都是有意义的(不是自动生成的__unknown_something标记,如果是未命名的结构,您可以,例如,在visual studio类视图中查看)。 同样的问题/问题适用于工会和枚举。

C中带有typedef结构的未知类型名称

此代码写在名为Monster.c的文件中。 我在GameMain.c文件和Monster.c文件中都定义了Monster.h。 在Monster.h文件中,代码是: #ifdef MONSTER_H_ #define MONSTER_H_ int Monster(int Selection); EnemyStats MonsterStats(int Selection); #endif 然后我在Monster.c文件中创建了我的typedef结构,并创建了函数来返回结构的值。 typedef struct EnemyStats { int EnemyHP; int VictoryExp; int EnemyLevel; } EnemyStats; EnemyStats MonsterStats(int Selection) { struct EnemyStats value; switch(Selection) { case 1: value.EnemyLevel = 1; value.VictoryExp = 1; value.EnemyHP = 1; return value; case 2: value.EnemyLevel = 1; value.VictoryExp […]

将typedef与实例声明一起使用。 维基错误?

根据此 Wiki页面,可以编写以下结构: typedef struct my_struct { int integer; } my_struct_t instance; K&R在“C Proglamming Language”中没有提到这一点。 编译器在编译期间也会返回错误: 错误:expected = ; instance之前的, asm或__attribute__ 这是一个Wiki错误还是我做了一些愚蠢的事情?

在C中使用malloc为typedef类型分配空间

我不确定我需要使用什么作为malloc的参数来在table_allocate(int)函数中分配空间。 我只想到count_table * cTable = malloc(sizeof(count_table *)),但这对size参数没有任何作用。 我应该为list_node_t分配空间吗? 以下是我正在使用的内容。 在.h文件中我给了这个签名: //创建一个count表结构并为其分配空间 //将其作为指针返回 count_table_t * table_allocate(int); 以下是我应该使用的结构: typedef struct list_node list_node_t; struct list_node { char * key; int值; //列表中的下一个节点 list_node_t * next; }; typedef struct count_table count_table_t; struct count_table { int size; //一个list_node指针数组 list_node_t ** list_array; }; 谢谢!

在C中创建Typedef结构的Typedef指针

在C中有关于typedef的问题 我已经定义了struct: typedef struct Node { int data; struct Node *nextptr; } nodes; 我如何创建struct node的typedef指针? 谢谢 !

是否有替换typedef函数指针的语法?

为了为函数指针做一个typedef,我们做这样的事情, typedef int (*func) (char*); typedef struct{ char * name; func f1; } 与此相反,我遇到了一个我不明白的代码。 typedef int rl_icpfunc_t (char *); typedef struct { char *name; /* User printable name of the function. */ rl_icpfunc_t *func; /* Function to call to do the job. */ char *doc; /* Documentation for this function. */ }COMMAND; 这是libedit库示例的代码片段。 有人可以向我解释一下吗?

Typedef和enum具有相同的名称?

在FreeImagePlus库中,在FreeImage.h ,有一个有趣的#define似乎创建了一个typedef和一个具有相同名称的enum : #define FI_ENUM(x) typedef int x; enum x 这由预处理器扩展为代码,如: typedef int FREE_IMAGE_FILTER; enum FREE_IMAGE_FILTER { FILTER_BOX = 0, FILTER_BICUBIC = 1, […] 这是做什么的? 拥有一个typedef和一个同名的enum是否合法? 并不是一个与int兼容的enum ? 为什么FreeImage会这样做?

在C中具有不同定义的相同名称结构

是否允许在同一项目中的2个不同c文件中使用具有不同定义的相同名称结构。 例如。 FILE1.C typedef struct { unsigned int unVar; } abc; file2.c中 typedef struct { int var; } abc; 两个文件中都使用了abc。 当我将这些文件编译为同一项目的一部分时,没有错误,但我想了解这是否正确用法。

关于typedef中单实例数组的一些问题

我正在使用GNU Multi-Precision(GMP)库代码使用任意长度的整数来阅读一些代码。 MP整数的类型是mpz_t如gmp.h头文件中所定义。 但是,我对这个库定义的mpz_t类型的低级定义有一些疑问。 在标题代码中: /* THIS IS FROM THE GNU MP LIBRARY gmp.h HEADER FILE */ typedef struct { /* SOME OTHER STUFF HERE */ } __mpz_struct; typedef __mpz_struct mpz_t[1]; 第一个问题: [1]是否与__mpz_struct相关联? 换句话说, typedef是将mpz_t类型定义为__mpz_struct数组,只出现一次? 第二个问题:为什么arrays? (为什么只出现一次?)这是我听说过的结构黑客之一吗? 第三个问题(可能与第二个问题间接相关): mpz_init_set(mpz_t, unsigned long int)函数的GMP文档说只使用它作为pass-by-value,尽管可以假设这个函数会修改其内容被调用的函数(因此需要pass-by-reference)语法。 参考我的代码: /* FROM MY CODE */ mpz_t fact_val; /* declaration */ mpz_init_set_ui(fact_val, 1); […]

为什么主编译器对stdint.h使用typedef,而对stdbool.h使用#define?

我只是注意到gcc和clang似乎都对stdint.h使用typedef,而对stdbool.h使用#define。 例如: clang的stdint.h #ifdef __INT8_TYPE__ #ifndef __int8_t_defined /* glibc sys/types.h also defines int8_t*/ typedef __INT8_TYPE__ int8_t; #endif /* __int8_t_defined */ typedef __UINT8_TYPE__ uint8_t; # define __int_least8_t int8_t # define __uint_least8_t uint8_t #endif /* __INT8_TYPE__ */ clang的stdbool.h #ifndef __cplusplus #define bool _Bool #define true 1 #define false 0 #elif defined(__GNUC__) && !defined(__STRICT_ANSI__) /* Define _Bool, bool, […]