Когда вы компилируете файл main.cpp
, оператор extern const int valueTen = 10;
сообщает компилятору, что переменная valueTen
является константой и не будет изменяться во время выполнения. Как правило, это «передает» компоновщику сигнал о том, что он может выделить место для этой переменной в области памяти с атрибутом READONLY
.
Когда вы компилируете файл mathFunctions.cpp
, операторextern int valueTen;
сообщает компилятору, что valueTen
является целочисленной переменной, определение которой предоставлено другим модулем. В этом файле нет ничего, что сообщало бы компилятору о том, что valueTen
равно const
, поэтому вы не получите ошибку компилятора, если включите код, который изменяет его значение.
Однако, когда вы создалипрограмма (связала все отдельные модули), затем код, созданный оператором valueTen++;
, попытается изменить что-то, что находится в памяти READONLY
- и это приведет к аварийному завершению программы с сообщением в виде строки "Нарушение доступа. "
Не стесняйтесь просить дальнейших разъяснений и / или объяснений.