C ++: Изменение одного глобального изменяет неродственный. Почему?C++

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

Сообщение Anonymous »

Есть какой-то код OpenGL ниже, но это не связано с OpenGL Per-SE. Похоже, что я не нашел странную причуду C ++, которую я не понимаю. У меня определены следующие глобальные переменные: < /p>

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

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 ... ed-one-why
Ответить

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

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

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

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

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