В C глобальная переменная, которая не имеет инициализатора или каких-либо спецификаторов класса хранения, является предварительным определением переменной с статической продолжительностью хранения и внешней связью .
В единице перевода все предварительные определения и до одного неумышленного определения (например, из объявления с инициализатором) объединяются в одно определение для переменной. Хотя не разрешено иметь определение одной и той же переменной в нескольких единицах перевода, это общее расширение, позволяющее разрешать «общие» переменные, то есть предварительные определения одной и той же переменной в нескольких единицах перевода.