The following is the Omni project's coding standard/style. A common coding style causes less difficulties when trying to maintain code. Do not block mark changed code. This only clutters the file. CVS should be able to give you version history of when changes went into code. Don't: if (i == 0) // @FIX01 { // @FIX01 ... // @FIX01 } // @FIX01 Tabs are not used and the indentation level should be three spaces. Function declarations are as follows: /***************************************************************************/ /* Documentation of inputs/outputs/returns of the function and what it */ /* does. */ /***************************************************************************/ int function (char *pszName, int iValue) { int i = 0; char achId[64]; int j = 20; ... } - The return type and class name are on the first line - The name of the function is on the first column of the second line - The type identifiers are aligned and the parameters are aligned. The same holds true of initialization values. - returns should not look like function calls. yes: return 0; no: return( 0 ); or return (0); Function prototypes: The names and parameters should be aligned. void functionOne (int iParam1); int functionTwo (char *pszName); If statements: The tests should look like: if (i == k) and not like if( i == k ) or if ( i == k ) A sample if statement looks like: if (i > 5) { ... } else { ... } - Simple if statements that have one statement do not need braces. However, when one of the sections is complex and requires braces, the other section should have one as well. if (y != 0) y--; if (i > 5) vs. if (i > 5) fSet = true; { else fSet = true; { } ... else } { ... } - When there are multiple tests in a if/else statement, then the following structure should be used. if ( j < 4 or if ( ( pszValue1 or if ( i < 2 && i == 2 && *pszValue1 && j >= 3 ) ) && k == 0 { || ( pszValue2 && l != 1 ... && *pszValue2 ) } ) { { ... ... } } else if ( i == 0 || j == 0 ) { ... } While statements have the same format as if statements. while (i > 0) { ... } Switch/Case statements: The case is on the same indentation level as the switch. This helps keep the code from "migrating" too far across the screen. A simple switch looks like: switch (i) { case 0: j = 2; break; case 1: j = 1; break; case 2: j = 0; break; } While a complex switch looks like: switch (i) { case 0: case 1: { ... } case 2: { ... } default: { ... } } Function calls: Should look like: fillcode (4); and not like fillcode( 4 ); or fillcode ( 4 ); Multiple parameters can on the same line: fillcode (i, j, k); However, if the length of the line becomes too long, then it should be aligned: fillcode (iNumberOfRequestedElements, pRoot, &iNumberOfHits); Hungarian notation: Variables should use Hungarian notation (except for simple loop variables like i or j, etc..., or return codes such as rc). Array a Character ch Integer i Long Integer l Unsigned u Byte b Boolean f Global v Pointer p Pointer to a zero terminated String psz Class variables should have a _d prefix! Header files: Header files should have ifdefs to protect against multiple inclusions. For example: #ifndef _NewFile #define _NewFile ... #endif