========= Antworten [TOC] ========= Zu den ersten beiden Fragen: _answer_ ist global, alle anderen Variablen sind lokal. _answer_ ist ab der Deklaration im gesamten Programm zu sehen, _i_ innerhalb der `for`-Schleife, _val_ innerhalb des Blocks innerhalb der `for`-Schleife. Alle globalen Variablen werden nur einmal instantiiert. Die `for`-Schleifen-Variable `i` wird hier nur einmal instantiiert, die Variable `val` bei jedem Schleifendurchlauf, d.h. insgesamt fünf Mal. Da _val_ nicht initialisiert wird, ist der Wert hier immer undefiniert und damit auch der Wert, der nachfolgend ausgegeben wird. Es ist damit zu rechnen, dass es auf unterschiedlichen Plattformen oder der Verwendung unterschiedlicher Compiler oder Übersetzungsoptionen verschiedene Resultate entstehen. Beispiel: ---- CODE (type=sh) ----------------------------------------------------------- theon$ g++ -Wall -o vars vars.cpp theon$ ./vars -1073748072 42 43 44 45 theon$ ------------------------------------------------------------------------------- In diesem Fall wurde zunächst `-1073748072` ausgegeben, ein Wert der zufällig in der entsprechenden Speicherfläche stand. Auch wenn die Variable immer neu instantiiert wird, liegt die Annahme nahe, dass sie sich an der gleichen Speicherlokation auf dem Stack befindet. D.h. sie behält hier offenbar den Wert. Dies ist aber keinesfalls sichergestellt. Interessant ist hier übrigens, dass bei eingeschalteten Optimierungen sich der Übersetzer mehr Zeit für Analysen nimmt, die wiederum zu Warnungen führen können: ---- CODE (type=sh) ----------------------------------------------------------- theon$ g++ -Ofast -Wall -o vars vars.cpp vars.cpp: In function 'int main()': vars.cpp:8:20: warning: 'val' may be used uninitialized in this function [-Wmaybe-uninitialized] std::cout << val << std::endl; ^~~ theon$ ------------------------------------------------------------------------------- Es werden aber keinesfalls alle denkbaren Fälle auf diese Weise entdeckt. :navigate: up -> doc:index back -> doc:session01/page02 next -> doc:session01/page04