Task

Show all ways to include text in a language source file
that's completely ignored by the compiler or interpreter.



Related tasks

   Documentation
   Here_document


See also

   Wikipedia
   xkcd (Humor: hand gesture denoting // for "commenting out" people.)


 
//////////////////////////////////////////////////////////////////////////////////////////////
//
// Line Comments: 
// =============
//
@VAR v1 = 10; // Line comments start from the "//" and continue to end of the line. 
//               (normal code can appear on the same line, before the //)
//
//   Line comments can span a complete line, or start in the middle of a line.
///
//// Additional // chars and /* /*  /[  ]/ and  /] are ignored
//// Line comments can be appear to be nested, since any additional // is ignored.
///
//   Note: // can appear in strings without triggering a line comment
//         // cannot appear inside an operator (or verbname), since a line comment
//            would start
//
/////////////////////////////////////////////////////////////////////////////////////////////
 
/********************************************************************************************
 *
 *  Block Comments:
 *  ==============
 *
 ********************************************************************************************/
//* 
//*  These start with /* and end with the next */ .  They cannot be nested, since the first */  
//*  will end the block comment.  For example, the comment, /* /* */ */ would end after the     
//*  first */. Note that /* is ignored inside a block comment, as are   //   /[   /] and  /].
//* 
//*  Also note that something like the following will cause trouble in a block comment:
//* 
//*    /* comments                          //
//*     * more comments                     //   */  (the // does not prevent the */ from ending    
//*     * (no longer part of the comment)   //        block comment)
//*     */
//* 
//*    Note: /* can appear in strings without triggering the start of a block comment
//*          /* cannot appear inside an operator (or verbname), since a line comment will
//*             start, although */ is allowed inside an operator (verbname).  Commenting
//*             out such a verbname may cause problems.
//* 
//*    Note: Since string literals are not recognized in block comments, */ appearing
//*          in a string literal inside a block comment (perhaps commented-out code)
//*          will cause the block comment to end.  
//* 
//*    Note: It is an error to start a block comment and not end it, so that it is still
//*          in progresss when the end-of-file is reached.
//* 
//*    Block comments can appear inside lines of code:  
//* 
/*1*/@VAR/*2*/v2/*3*/=/*4*/20/*5*/;/*6*/  // a line comment can follow block comments on the 
                                           // same line
 
/[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] 
/[]                                                                                          [] 
/[]     Nestable Block Comments:                                                             []
 []     ========================                                                             []/
 []                                                                                          []/
 [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]/ 
 
//[] 
//[]  These start with /[ and end with the next matching ]/ .  Additional occurrences
//[]  of /[ ... ]/ can appear inside a nestable block comment.  The nestable block comment    
//[]  will end only when the nest level reaches 0.  Note that /* is ignored inside a nestable     
//[]  block comment, as are  */   //  and  /].
//[]
//[]  Nestable block comments can be used to comment out blocks of code containing line 
//[]  comments or regular comments, and even balanced and well-formed nestable block comments.
//[] 
//[]    Note: /[ can appear in strings without triggering the start of a block comment.  
//[]          However, strings literals are not recognized inside a nestable block comment, so
//[]          any appearances of /[ and /] inside a string literal in a nestable block commment 
//[]          will affect the nest level, and may cause problems.
//[] 
//[]    Note: It is an error to start a nestable block comment and not end it, so that it is
//[]          still in progresss when the end of file is reached.
//[] 
//[]    Nestable block comments can appear inside lines of code:  
//[] 
/[1]/@VAR/[2]/v3/[3]/=/[4]/30/[5]/;/[6]/  // a line comment can follow nestable block comments 
                                          // on the same line
 
@SAY v1 v2 v3;                            // should see:   10 20 30
 
/]
/=================================================================================================\
|                                                                                                 |
|   /] starts a block comment that lasts until the end of the current file.  Everything after     |
|   the /] is ignored.                                                                            |
|                                                                                                 |
\=================================================================================================/
 