Почему изменение одного глобального изменяет неродственную? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему изменение одного глобального изменяет неродственную? [закрыто]

Сообщение Anonymous »

Есть какой-то код OpenGL ниже, но это не связано с OpenGL Per-SE. Кажется, что я нашел странную Quirk C ++, которого я не понимаю.

Код: Выделить всё

struct Renderer
{
GLuint program;
float aspectRatio;
};

// global scope
Renderer renderer;
bool shouldClose = false;
< /code>
По какой-то странной причине, когда я вызываю следующую функцию: < /p>
void initRenderer(Renderer *renderer)
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_MULTISAMPLE);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

// adding the temporary to show that `shouldClose` is not
// modified as a side effect of `shaderProgram`.
GLuint program = shaderProgram("../shaders/vertex.glsl", "../shaders/fragment.glsl");

// this line sets `shouldClose` to the value in `program`
renderer->program = program;
}

// main is in the same translation unit where `Renderer` and `shouldClose` are defined.
int main() {
// ...
initRenderer(&renderer);
// ...
}
Еще одна странная вещь, которая случается, заключается в том, что, если я переключаю порядок, в котором рендерерат и должен Code , определяются в глобальном объеме, как показано ниже, проблема исчезает:
bool shouldClose = false;
Renderer renderer;

Вывод Cl.exe -version :

Код: Выделить всё

Microsoft (R) C/C++ Optimizing Compiler Version 19.44.35208 for x64
Почему настраивает атрибут одной структуры, изменяющей другую, совершенно не связанную переменную?


Подробнее здесь: https://stackoverflow.com/questions/797 ... elated-one
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»