Вам нужно изменить одну вещь, чтобы она заработала: extern int i = 100;
в main.c следует изменить на int i = 100;
Даже если это возможно, я не думаю, что это хороший дизайн. Вещи, которые вы извлекаете в отдельные файлы, должны иметь возможность использовать их самостоятельно, не зная, что находится внутри main.c
.
Полезная стратегия для такого рода рефакторинга: сначала переместите данные, затем переместите функции, которые используют эти данные. То есть сначала переместите переменную i
в small.c
, затем переместите функции, которые используют i
.
Если вы хотите переместить функции, но не данные, попробуйте передать i
в качестве аргумента вместо доступа к нему с помощью объявления extern
.