Comment/Uncomment code to switch versions quickly without using macros


In a typical day, I write or debug programs in several languages: typically Foxpro, C#, VB, C++ and 32 bit assembly, with an occasional MSIL, IDL and 64 bit ASM thrown in.


 


Sometimes, I like to switch between one version of code and another. This is useful if I want to do side by side comparisons of behavior.


 


One way to do this is with preprocessor macros, like this:


 


#If  SomeValue


                <one version of code>


#else


                <another version>


#endif


 


However, that’s a fair amount of typing.


 


There’s a shortcut that works with C# and C++ style comments.


 


In these languages, a line that starts with “//” is a comment.


 


Also, a block comment (which can span multiple lines) starts with “/*” and ends with “*/”


 


 


 


//*


      int sub foo1() {


            int x = 2;


                  Console.WriteLine((new System.Diagnostics.StackTrace().GetFrames()[0].GetMethod().Name)); // shows Foo1


            return x;


      }


 


/*/


      int sub foo2() {


            int x = 3;


                  Console.WriteLine((new System.Diagnostics.StackTrace().GetFrames()[0].GetMethod().Name)); // shows Foo2


            return x;


      }


// */


 


With a single character change I can switch between foo1 and foo2: just delete the very first “/”.  That changes the single line comment into a block comment. The “*/” of the “/*/” now acts like the end of the comment block.


 


Using an editor that colors the code (like Visual Studio) shows the switch properly


 


 


 


/*


      int sub foo1() {


            int x = 2;


                  Console.WriteLine((new System.Diagnostics.StackTrace().GetFrames()[0].GetMethod().Name)); // shows Foo1


            return x;


      }


 


/*/


      int sub foo2() {


            int x = 3;


                  Console.WriteLine((new System.Diagnostics.StackTrace().GetFrames()[0].GetMethod().Name)); // shows Foo2


            return x;


      }


// */


 


This technique is useful when creating sample code for others to play with, such as in my next blog post.


 


 


 

Comments (7)

  1. Greg says:

    Bool a = false; //set breakpoint here

    if (a == true) //modify A to follow the code path you want.

     {

     code path 1

     }

    else

     {

     code path 2

     }

  2. When I wrote my cartoon animation program almost 30 years ago (see Cartoon animation program ) I needed

  3. Gary says:

    Is it posssible to do something like this in vb?

  4. Calvin_Hsia says:

    For VB code, to switch between versions, I use something like this:

                           If 0 Then

                               Dim x = 2

                           Else

                               Dim x = 3

                           End If

    Changing the 0 to a 1 makes it reverse the code

  5. In the last post, Area fill algorithm: crayons and coloring book , I showed a program that emulates a