On Thursday 08 of September 2011 11:41:05 Winston Kodogo wrote: > (...) > I'm puzzled as to why the line "int nigel = 1;" is syntactically OK, > and although it seems to have declared the variable "nigel" - else the > following code would fail to compile - has failed to give it the > initial value of 1, as requested.
consider the `switch' statement a switchboard that jumps to one of the `case's. nigel is not getting initialized because this code path is not executed -- as it is not part of any `case' taken by the switch. an `automatic' (non-static) variable is initialized by a piece of code, the code gets executed whenever flow of control reaches that particular place. a static variable (`static int inigel = 1') is initialized by static data, before any code gets executed -- and only once. static will do what you expect. this is why you can place a static variable outside of any function and it still gets initialized. both kinds have their uses, in different situations. for reference: for (int i = 0; i < 8; ++i) { int nigel = 1; // this emits some code that gets executed for every loop and resets the var to `1' printf("nigel: %d,", nigel); ++nigel; } will print: nigel: 1,nigel: 1,nigel: 1, ... on the other hand: for (int i = 0; i < 8; ++i) { static int nigel = 1; // this var is initialized just once before main() begins and doesn't reset printf("nigel: %d,", nigel); ++nigel; } will print: nigel: 1,nigel: 2,nigel: 3, ... -- dexen deVries [[[↓][→]]] For example, if the first thing in the file is: <?kzy irefvba="1.0" rapbqvat="ebg13"?> an XML parser will recognize that the document is stored in the traditional ROT13 encoding. (( Joe English, http://www.flightlab.com/~joe/sgml/faq-not.txt ))