Warum modifiziert das Ändern eines globalen Verhältnisses eine nicht verwandte? [geschlossen]C++

Programme in C++. Entwicklerforum
Anonymous
 Warum modifiziert das Ändern eines globalen Verhältnisses eine nicht verwandte? [geschlossen]

Post by Anonymous »

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.

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);
// ...
}
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:

Code: Select all

bool shouldClose = false;
Renderer renderer;
Die Ausgabe von Cl.exe -version lautet:

Code: Select all

Microsoft (R) C/C++ Optimizing Compiler Version 19.44.35208 for x64
Warum ist das Festlegen des Attributs einer Struktur, die eine andere, völlig unabhängige Variable verändert?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post