Программа не работает, когда extern const назначается новое значение без каких-либо ошибок. Нужно объяснение по этому поводу - PullRequest
1 голос
/ 02 ноября 2019

У меня есть переменная extern const int в main.cpp, которую я использую в mathFunctions.cpp. Если я пытаюсь изменить переменную в mathFunctions.cpp, программа завершается ошибкой. Я использую последнюю версию CodeBlocks с C ++ 11.

Программа работает нормально, если я не пытаюсь изменить переменную.

//main.cpp
#include <iostream>
using namespace std;
extern const int valueTen = 10;
int addValue(int);
int main()
{
    cout << addValue(2) << endl;
    return 0;
}
//mathFunctions.cpp
extern int valueTen;
int addValue(int x){
    valueTen++; //program stops because of this line
    return x + valueTen;
}

1 Ответ

3 голосов
/ 02 ноября 2019

Когда вы компилируете файл main.cpp, оператор extern const int valueTen = 10; сообщает компилятору, что переменная valueTen является константой и не будет изменяться во время выполнения. Как правило, это «передает» компоновщику сигнал о том, что он может выделить место для этой переменной в области памяти с атрибутом READONLY.

Когда вы компилируете файл mathFunctions.cpp, операторextern int valueTen; сообщает компилятору, что valueTen является целочисленной переменной, определение которой предоставлено другим модулем. В этом файле нет ничего, что сообщало бы компилятору о том, что valueTen равно const, поэтому вы не получите ошибку компилятора, если включите код, который изменяет его значение.

Однако, когда вы создалипрограмма (связала все отдельные модули), затем код, созданный оператором valueTen++;, попытается изменить что-то, что находится в памяти READONLY - и это приведет к аварийному завершению программы с сообщением в виде строки "Нарушение доступа. "

Не стесняйтесь просить дальнейших разъяснений и / или объяснений.

...