Reputation: 4624
I've noticed, using visual studio 2003, that I can "comment out" my comments to make them no longer be comments. This one needs an example:
If I have:
/*
int commented_out = 0;
*/
I can comment out the /* and */ with // and code within the /* and */ is no longer "commented out" (the text changes to non-comment color and the compiler treats it as code once again). Like so:
///*
int commented_out = 0;
//*/
I've found this is true for msvc 2003, is this normal C++ behavior or is it just a fluke that works with this compiler?
Upvotes: 2
Views: 656
Reputation: 2931
Actually this works in almost any language with C style block comments.
/*
int foo = 0;
/*/
int foo = 1;
//*/
or even XML comments
<!--->
a
<!-->
b
<!---->
unfortunately I'm drawing a blank on lua's lightsaber comments
--[[---------
---------]]--
Upvotes: 1
Reputation: 400682
Yep, this is perfectly normal behavior. The C++ standard says that a /*
is the start of a comment block only if it itself is not commented out. I often use what you've written above to comment or uncomment a block of code by adding/deleting one character. A nice little trick for switching between two blocks of code, one of which is always commented out is:
//*
code block 1 (uncommented)
/*/
code block 2 (commented)
//*/
Now, delete one slash from the start, and it becomes
/*
code block 1 (commented)
/*/
code block 2 (uncommented)
//*/
Not something to use in production code, but very useful for quick debugging changes.
Upvotes: 20
Reputation: 882716
It should work in any compiler as the //
is encountered first in the input stream.
I tend to use #if 0
for this sort of stuff and change it to #if 1
to uncomment, shown here:
#if 0
int commented_out = 0;
#endif
Then I don't have to worry about comment markers at all.
Upvotes: 10