Why global variables are evil?

I've seen numerous people state that global variables are evil while I came across some libraries depend heavily on them. I assume in my question that the programmer knows what he/she is doing.
Its a matter of control. Who can modify a global? What is the lifetime of the global? What if I want to go parallel? Globals are like cats; they may look cute, but will they do your bidding easily or at all?
So based on my assumption and your answer, they are not evil. Am I right?
If the purpose of a variable is to be continuously modified in many places by the user such as std::cout or std::cin, then making the variable global seems reasonable. Here are some links for more info. For the most part, your variables are probably only going to be managed by a few functions that can easily be wrapped in a class or by passing as parameters.

Thank you for these links. They are very good especially the second one.
Topic archived. No new replies allowed.