Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重复的结构定义(头中的一个定义和C源中的另一个定义) 在头文件ABC.h 在abc.c文件中包含abc.h,并在abc.c中的某些函数中使用STRUCT\u abc 另一个文件def.c不包括abc.h。但在def.c中,我再次定义了一个同名的结构,即STRUCT_ABC,但内容不同 这两个abc.c和def.c都在同一个库中,在运行时,控制首先进入abc.c 控件从abc.c转到def.c并返回,比如说多次_C - Fatal编程技术网

重复的结构定义(头中的一个定义和C源中的另一个定义) 在头文件ABC.h 在abc.c文件中包含abc.h,并在abc.c中的某些函数中使用STRUCT\u abc 另一个文件def.c不包括abc.h。但在def.c中,我再次定义了一个同名的结构,即STRUCT_ABC,但内容不同 这两个abc.c和def.c都在同一个库中,在运行时,控制首先进入abc.c 控件从abc.c转到def.c并返回,比如说多次

重复的结构定义(头中的一个定义和C源中的另一个定义) 在头文件ABC.h 在abc.c文件中包含abc.h,并在abc.c中的某些函数中使用STRUCT\u abc 另一个文件def.c不包括abc.h。但在def.c中,我再次定义了一个同名的结构,即STRUCT_ABC,但内容不同 这两个abc.c和def.c都在同一个库中,在运行时,控制首先进入abc.c 控件从abc.c转到def.c并返回,比如说多次,c,C,这是否总是会导致运行时错误,或者有时可能会出现错误?它肯定不会导致运行时错误 编译器将在编译使用该结构的文件时获取它所看到的结构的定义,因此您也不应该得到任何编译或链接器错误 实际上,如果您想在两个位置使用相同的结构,最好在一个标题中定义它,并将其包含在多个.c文件中。这将使维护更容易(您只需要更新一次结构),并且您将确定使用的是哪一个定义(因为只有一个定义)。如果我的内存正确,这取决于编译器(取决于对结构定义应用了多少修饰),但通常会起作用(尽管我们需要更多的细节来确定)。只要这两个代码单元不

这是否总是会导致运行时错误,或者有时可能会出现错误?

它肯定不会导致运行时错误

编译器将在编译使用该结构的文件时获取它所看到的结构的定义,因此您也不应该得到任何编译或链接器错误


实际上,如果您想在两个位置使用相同的结构,最好在一个标题中定义它,并将其包含在多个.c文件中。这将使维护更容易(您只需要更新一次结构),并且您将确定使用的是哪一个定义(因为只有一个定义)。

如果我的内存正确,这取决于编译器(取决于对结构定义应用了多少修饰),但通常会起作用(尽管我们需要更多的细节来确定)。只要这两个代码单元不知道另一个单元中的冲突声明,编译器就不会真正为每个结构使用相同的名称,并且最终它会在任何情况下编译成一个未命名的内存块。不要将结构从abc传递到def,并期望它能够工作(如果您尝试,编译时可能会出错),但只要它们没有相互干扰,就应该可以了。

就像其他海报所说的那样,如果您严格定义这两个位置的结构,您应该可以。但是,您会自找麻烦,特别是如果def.c需要包含abc.h

从您的描述中,我并不100%清楚STRUCT_ABC是结构名还是实例名。如果您在两个文件(函数外部)中定义结构的实例,并且这些实例的名称相同,则除非您声明一个或两个实例
static
,否则将出现编译问题


这些错误应该是编译错误,除非你诱使一个函数期望一个结构使用另一个结构(即通过指针)。

响应chrisbtoo(我不知道如何将注释添加到他的帖子中;我是否遗漏了一些明显的东西?):他的结构具有相同的名称,但内容不同。因此单一的通用定义没有帮助。这听起来更像是命名上的意外重叠,或是根据使用它的代码的不同而表达的常见习惯用法(例如,两个点结构,一个在整数空间,一个在实/双空间)。到目前为止,我不会将abc.h包含在def.c中。此外,我有两种不同的结构,一种在头文件中,另一种在def.c中,具有不同的内容,但名称相同。例如,struct LOCAL_UTILS_struct{int i;char[]str1;};typedef struct LOCAL_UTILS_struct_UTILS_struct TYPE;struct LOCAL_UTILS_struct_{float f1;long i;};typedef struct LOCAL_UTILS_struct_UTILS_本地_UTILS_struct_TYPE;注意:这段代码运行良好,但最近它开始在def.cAs中的结构变量声明中出现分段错误一个简单的实验,我将尝试重命名一个
LOCAL_UTILS_struct_
声明(和用法)。这将很容易使您消除名称冲突作为问题,并可能突出显示真实的名称冲突。如果不是问题所在,则可以恢复。