Tag: typedef

为什么允许多次声明typedef标识符?

从C99标准来看,6.7(5): 声明指定一组标识符的解释和属性。 标识符的定义是该标识符的声明:对于对象,导致为该对象保留存储; 对于一个function,包括function体; 对于枚举常量或typedef名称,是标识符的(唯一)声明。 如果带有typedef标识符实际上是定义,那么为什么允许它们被多次声明? 例: int main() { typedef int x; typedef int x; } 以上程序编译没有错误。 这怎么可能? 我期待该程序给我一个多重定义错误。

“名称”的存储大小未知

编译此.c源文件时出现此错误 /INIT_SOURCE_BUILD/src/names_list.c:7:错误:“名称”的存储大小未知 #include #include “list.h” int main(){ struct List names; names->size = 3; struct ListElmt michael; struct ListElmt john; struct ListElmt adams; names->head = michael; michael->data = 12; michael->next = john; john->data = 14; john->next = adams; adams->data = 16; struct ListElmt pointer = List->head; for(int x = 0; x data); pointer->next = pointer->next->next; } […]

键入一个类型和相同类型的指针的正确方法是什么?

键入一个类型和相同类型的指针的正确方法是什么? 这就是我的意思。 我应该这样做: typedef unsigned int delay; typedef unsigned int * delayp; 或者我应该这样做: typedef unsigned int delay; typedef delay * delayp; 或者也许我根本不应该delayp指针而只是使用delay *而不是在我认为必要的任何地方delayp ? 谢谢,Boda Cydo。

typedef是存储类说明符吗?

我尝试了以下代码 #include int main(void) { typedef static int sint; sint i = 10; return 0; } 并发出以下错误: error: multiple storage classes in declaration specifiers 当我提到C99规范时,我发现typedef是一个storage class 。 6.7.1 Storage-class specifiers Syntax storage-class-specifier: typedef extern static auto register Constraints: At most, one storage-class specifier may be given in the declaration specifiers in a declaration Semantics: The […]

C与C ++中的struct和typedef

我目前正在使用C ++ IDE来处理需要在C上工作的东西,并希望确保稍后我不会遇到问题。 在制作下面的结构后: typedef struct test { int a; int b; }; 然后我使用test my_test;创建它的一个实例test my_test; 那么像my_test.a = 5类的东西……这在我的VStudio C ++中运行良好。 这会在以后的gcc上运行吗? 我读了相关的问题(我看到我不是第一个有这种问题的人),但似乎没有人像我这样做。 实际上, typedef struct {//stuff} test;之间有什么区别typedef struct {//stuff} test; 和我的版本?

Typedef,标记和未标记的结构以及不兼容的指针类型

请考虑以下C代码段: typedef struct node{ int val; struct node* left; struct node* right; }node; void inorderTraversal(node *p){ inorderTraversal(p->left); printf(“%d”,p->val); inorderTraversal(p->right); } 如果我只编写typedef struct而不是typedef struct node ,当我在main()调用inorderTraversal(root)时,我会收到一条警告,说“传递不兼容指针类型的参数”。 为什么即使程序没有显示任何错误,我也会收到此警告?

typedef的命名方案

我正在开发一个广泛使用类似结构的库 typedef struct foo_bar_s { … } foo_bar_t; 使用_t后缀是个坏主意,因为它是POSIX保留的命名空间。 结构的_s后缀也很无用。 所以我想我可以改变一切 typedef struct foo_bar { … } foo_bar; 或者如果不需要结构名称 typedef struct { … } foo_bar; 但是,我无法再将typedef与常规符号(变量等)区分开来。 这真的是一个大问题,我应该为typedef使用不同的合适命名方案吗? 或者这不重要吗? 我真的不太确定。 你怎么看? 另外,您对typedef命名方案有什么建议?

C Typedef – 不完整类型

所以,出乎意料的是,编译器决定吐面:“现场客户的类型不完整”。 这是代码的相关代码段: customer.c #include #include #include “customer.h” struct CustomerStruct; typedef struct CustomerStruct { char id[8]; char name[30]; char surname[30]; char address[100]; } Customer ; /* Functions that deal with this struct here */ customer.h customer.h的头文件 #include #include #ifndef CUSTOMER_H #define CUSTOMER_H typedef struct CustomerStruct Customer; /* Function prototypes here */ #endif 这是我的问题所在: customer_list.c #include #include […]

typedef的指针类型被认为是不好的做法吗?

可能重复: Typedef指针好主意? 我在许多使用过的API中都看到了这种奇怪之处: typedef type_t *TYPE; 我的观点是声明一个TYPE的变量并不能说明实际上是一个指针被声明了。 你和我一样认为这会带来很多困惑吗? 这是否意味着强制执行封装,还是有其他原因? 你认为这是一种不好的做法吗?

为什么“typdef struct {struct S * s; S;“包含指向同一类型的指针编译?

我正在尝试typedef一个struct ,其中包含指向另一个相同类型的指针。 多数民众赞成我认为最好的版本: typedef struct Element { char value; struct Element *next; } Element; 为什么该变体也在编译+执行?: typedef struct { char value; struct Element *next; } Element; 为了描述第一个我会说: “现在名字struct Element Element ” ,第二个作为: “取这个匿名struct并称之为Element ” 但是为什么我仍然可以在第二种情况下声明一个struct Element (在struct中) ? (在GCC和MSVC工作)