abc.h
abc.h
文件中包含abc.c
,并在abc.c
内的某个函数中使用了STRUCT_ABC。def.c
不包含abc.h
。但是在def.c
中,我再次定义了一个具有相同名称的结构,即STRUCT_ABC,但内容不同。abc.c
& def.c
在同一个库下,控件在运行时首先出现在abc.c中。abc.c
转到def.c
,然后多次回来。这是否总能给出运行时错误,或者有时可能会有效?
答案 0 :(得分:0)
它肯定不会导致运行时错误。
编译器将在编译使用该结构的文件时获取它所看到的结构的定义,因此您不应该得到任何编译或链接器错误。
但是,真的,如果你想在2个地方使用相同的结构,你最好在一个标题中定义它,并#include
在多个.c文件中。它将使维护更容易(您只需要更新一次结构)并且您将确定您正在使用哪个定义(因为只有一个)。
答案 1 :(得分:0)
如果我的记忆是正确的,这取决于结构的定义应用了多少装饰,但它通常会起作用(尽管我们需要更多的细节才能确定)。只要两个代码单元不知道另一个单元中的冲突声明,编译器就不会为每个结构使用相同的名称,并且最终它会在任何情况下编译为未命名的内存块。不要将结构从abc传递给def并期望它工作(如果你尝试的话,它可能会在编译时出错),但只要它们没有踩到对方的脚趾就应该没问题。
答案 2 :(得分:0)
与其他海报一样,如果你在两个地方严格定义结构,你应该没问题。但是,你要求麻烦,特别是如果def.c需要包含abc.h。
根据您的描述,我不清楚STRUCT_ABC是结构名称还是实例名称。如果要在两个文件中定义结构的实例(在函数外部),并且实例的名称相同,那么除非您声明一个或两个实例static
,否则会出现编译问题。
错误应该是编译错误,除非你欺骗函数期望一个STRUCT_ABC使用另一个(即通过指针)。