Alex, that's still not a canonical way of doing it. Normally you'd only declare the variable in the header, using extern, and define it in exactly one compiled source file. 'extern' isn't a type, it's a modifier for the declaration which makes it declare that the variable exists, but not define it at this point. It's exactly what you want for declaring global variables in header files.
If the code you just posted did compile and link, it's probably due to the linker not being strict - for legacy reasons ("extern" didn't exist originally), linkers can usually coalesce duplicate variables, provided they don't have differing initialization values. It's bad practice though - much better to use "extern" since that's what it's there for.
Note the strict distinction between "define" and "declare". You should wrap your entire header file in multiple inclusion guards (as you did), in case it indirectly gets included more than once in a compilation unit (.c or .cpp file), as that protects against multiple declaration. You should also use extern, and define globals in one .cpp file only, to protect at link-time against multiple definitions of the same symbol. The two kinds of error are similar at first sight, but quite different in what's actually being complained about.
BTW, it's also good to include the header declaring the variable in the source file that defines the variable - this way the compiler gets to check that the declaration really does match the definition. Similarly, it can check that function prototypes match, etc. There are actually compiler options you can use to ensure you never create a global without having first included a header declaring it - I've found them useful in the past, if a bit pedantic.
(Edit: by the way, the comp.lang.c FAQ is a really good place to look for basic programming problems like this - while it's a long document, individual answers are short and to-the-point, and almost always 100% pedantically correct.)