И это всё МОЁ

Исходный код:


файл a.c:


#include "c.h"
int main(){
struct struct_h test;
func_test(&test);
return 0;
}


файл b.c:


#include "c.h"
void func_test(struct struct_h *test){
test->test=0;
return;
}


файл c.h:


struct struct_h{
int test;
} struct_h;
void func_test(struct struct_h *test);


Компилировать: gcc a.c b.c -o a.out или clang a.c b.c -o a.out


Начиная с GCC версии 10 стало:


/bin/ld: /tmp/ccDFtToH.o:(.bss+0x0): повторное определение «struct_h»; /tmp/ccDWcSDH.o:(.bss+0x0): здесь первое определение
collect2: error: ld returned 1 exit status


В clang нет ошибок, во всех прошлых версиях gcc, я проверял начиная с gcc 5.4 до gcc9, тоже нет обшибок.


Очевидный фикс это добавить typedef для структуры в c.h, просто интересно кто прав в этой ситуации.









 , ,