Компоновщик жалуется, потому что будет несколько определений x
, как только он соберет все объектные файлы вместе, чтобы создать исполняемый файл.У вас есть два разных исходных файла, включая один и тот же заголовочный файл, и этот заголовочный файл определяет переменную x
, имеющую значение 10, поэтому в итоге вы получите два определения x
(одно в 1.c, а другое в 2.c).
Чтобы избежать ошибок компоновщика нескольких определений, поместите это в заголовочный файл (например, globals.h
):
#ifndef GLOBALS_H
#define GLOBALS_H
/*
* The "extern" keyword means that this variable is accessible everywhere
* as long as this declaration is present before it is used. It also means
* that the variable x may be defined in another translation unit.
*/
extern int x;
#endif
Затем вставьте в one исходный файл:
#include "globals.h"
int x = 10;