Tag: forward declaration

为什么允许指向不完整类型的指针而不是不完整类型的变量?

为什么以下是合法的: typedef struct a aType; struct a { int x; aType *b; }; 以下非法: void main() { typedef struct a aType; aType someVariable; struct a { int x; aType *b; }; } 我只是好奇,因为在每种情况下它都是前向引用,据我所知,至少对于函数和变量,前向引用是不合法的。 另外,对于C ++,这个问题的答案是否相同?

C:staticforward的Python扩展

所以我需要使用子进程模块的代码来添加我需要的一些function。 当我尝试编译_subprocess.c文件时,它会给出以下错误消息: Error 1 error C2086: ‘PyTypeObject sp_handle_type’ : redefinition 这是与_subprocess.c文件相关的代码部分: typedef struct { PyObject_HEAD HANDLE handle; } sp_handle_object; staticforward PyTypeObject sp_handle_type; static PyObject* sp_handle_new(HANDLE handle) { sp_handle_object* self; self = PyObject_NEW(sp_handle_object, &sp_handle_type); if (self == NULL) return NULL; self->handle = handle; return (PyObject*)self; } #if defined(MS_WIN32) && !defined(MS_WIN64) #define HANDLE_TO_PYNUM(handle) PyInt_FromLong((long) handle) #define PY_HANDLE_PARAM […]

C在头文件中转发struct

我试图在函数中传递struct指针。 我在file1.h中有一个typedef ,并希望只将该头包含到file2.c中,因为file2.h只需要指针。 在C ++中,我会像在这里一样写,但是使用C99它不起作用。 如果有人有任何建议如何传递struct指针没有完全定义,将非常感激。 编译器 – gcc。 file1.h typedef struct { … } NEW_STRUCT; file2.h struct NEW_STRUCT; void foo(NEW_STRUCT *new_struct); //error: unknown type name ‘NEW_STRUCT’ file2.c中 #include “file2.h” #include “file1.h” void foo(NEW_STRUCT *new_struct) { … }

变量的前向声明?

我有一些C代码,我必须移植到C ++。 代码有一个结构 struct A { … struct A * myPtr; } 现在声明和初始化两个全局数组,如下所示: //Forward declaration of Unit struct A Unit[10]; struct A* ptrUnit[2] = { Unit, Unit+7 }; struct A Unit[10] = { { .., &ptrUnit[0] }, … }; 现在虽然这在C中运行良好,但它在C ++中给出了错误(变量重新声明)。 是不是允许变量在C ++中进行前向声明?

在C中使用前向声明的typedef stuct

我有类似的东西: typedef struct Data DATA, *DATA_PTR; typedef struct Units UNITS, *UNITS_PTR; struct Data { double miscData; UNITS units; }; struct Units { double x[2]; double y[2]; double z[2]; }; 在我的project_typedef.h文件中。 在另一个文件中,我有类似的东西: void fileInput(DATA_PTR data) { //usual declarations and other things data->miscData = 0; //Works! data->units.x[0] = 5; //Doesn’t work //etc… } 但是,这不起作用,因为单元是在project_typedef.h数据之后声明的(如果我切换它的工作顺序)。 我得到的错误是“左’.x’必须有struct / union类型”。 […]

转发申报文件*

如何在C中转发声明FILE * ? 我通常使用struct MyType;执行此操作struct MyType; ,但自然这似乎不可能。 如果C标准或编译器与C ++之间的行为不同,这也是有意义的。 Update0 为什么我要把这个放在一边:我要问的是如何转发声明一个非结构/“typedef’d结构”类型,以便我可以声明指向它的指针。 显然使用void *并将其转换为源文件有点hackish。

“名称”的存储大小未知

编译此.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; } […]

C / C ++编译器如何在头文件中找到原型的定义?

当我在头文件中声明一个函数,并将该函数的定义放在其他文件中时,编译器/链接器如何找到定义? 它是否系统地搜索其路径中的每个文件,还是有更优雅的解决方案? 这一天一直困扰着我,我一直无法找到解释。