Это кажется домашним вопросом, но я все равно укушу.
Для использования х вы определили здесь в классе или функции из другого файла, вы должны использовать
extern int x;
выше вашего использования переменной х (например, в заголовке), то вы можете использовать х раз как и в main(). extern сообщает компилятору, что вы используете переменную, которая определена/создана в другом месте.
Если вы хотите, чтобы он существовал до запуска основного, то вы используете статику, которая обрабатывается до запуска main(). Другими словами, он загружает пространство памяти с переменными до начала обработки (в основном.).
Что касается причины, когда при запуске это 0, это скорее всего ваш компилятор, дающий ему базовое значение. Не все компиляторы делают это, если я не ошибаюсь, многие просто дадут вам все, что было в пространстве памяти, выделенном для x, которое может быть чем угодно. Другими словами, они дают вам память, заполненную любыми данными (или частичными данными) в ней заранее.
Вы можете уточнить свой вопрос о 'extern'? –
Если я хочу объявить внешнюю переменную, не так ли получается? – Kanishk
Разница между этим и внешним заключается в том, что внешний интерфейс является внешним, и это не так. –