Warum modifiziert das Ändern eines globalen Verhältnisses eine nicht verwandte? [geschlossen]
Posted: 26 Aug 2025, 08:42
Es gibt einen OpenGL-Code unten, aber dies ist nicht mit OpenGL pro-SE zu tun. Es scheint, als hätte ich eine seltsame C ++-Quirk gefunden, die ich nicht verstehe.
Eine weitere seltsame Sache ist, dass, wenn ich die Reihenfolge wechsle, in der Renderer und in globalem Umfang definiert werden, wie unten gezeigt, verschwindet das Problem:
Die Ausgabe von Cl.exe -version lautet:
Warum ist das Festlegen des Attributs einer Struktur, die eine andere, völlig unabhängige Variable verändert?
Code: Select all
struct Renderer
{
GLuint program;
float aspectRatio;
};
// global scope
Renderer renderer;
bool shouldClose = false;
< /code>
Aus irgendeinem seltsamen Grund, wenn ich die folgende Funktion aufrufe: < /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: Select all
bool shouldClose = false;
Renderer renderer;
Code: Select all
Microsoft (R) C/C++ Optimizing Compiler Version 19.44.35208 for x64