Next: Strong Suggestions Up: NIL/PIL Coding Guidelines Previous: Summary

Requirements

Run the code through 'lint' from the very beginning, and maintain the code 'lint-free' throughout the development. The effort saved in debugging sessions is 10 times the effort invested.

No source file should be longer than a few hundred lines.

No function should be longer than three screen pages.

All functions should be prefixed with a macro to indicate whether they are private (called only from within the file) or public (called from outside the file):



        #define  private   static
        #define  public


        public  void  initialize_program()
        {
        }

        private  void  add_region()
        {
        }

The order of functions within a file should be consistent, either top-down or bottom up, i.e.:



        public  void  function1()
        {
            void   function2();

            function2();
        }

        private  void  function2()
        {
            void   function3();

            function3();
        }

        private  void  function3()
        {
            void   function4();

            function4();
        }

TAB characters should not appear in code because:

Eight spaces is too much for indentation. Use 2, 3, or 4 space characters for indentation. Whatever is chosen, be consistent in identing.



    if( a == b )
    {
        for( i = 0;  i < 10;  ++i )
        {
            if( i == 0 )
            {
                (void) printf( "Hello\n" );
            }
            else
            {
                (void) printf( "again\n" );
            }
        }
    }

Where do the braces {and }go? It does not matter, as long as you are consistent.



        if( a == b )
        {
            (void) printf( "Hello\n" );
        }
OR


        if( a == b ) {
            (void) printf( "Hello\n" );
        }

Defined constants and macros should be all caps:



        #define  MAX_STRING_LEN   243

        typedef char String[MAX_STRING_LEN];

        #define  ERROR( msg )            \
        {                                \
            (void) printf( stderr,       \
                           "Error %s\n", \
                           msg );        \
            abort();                     \
        }

Likewise, enumerated types should use all caps for the constants, and first character capitalized for the name of the type:



        typedef  struct  { AM, FM, SHORTWAVE }  Radio_types;

Global variables, if used, should have the first character capitalized:



        extern  int  Gradient_threshold;

Locals and statics should be all lower case, with underscores as necessary:



        int  i, j, max_value, min_value;

Do not skimp on variable and function names, use point_index instead of p, use sort_voxels_by_intensity() instead of sort(). One exception is for complicated expressions.

All functions should have a type. Do not let it default to integer.
WRONG:



        function()
        {
        }
RIGHT:


        void   function1()
        {
        }

        int    function2()
        {
        }

In order to make your code lint-able, use (void) in front of any function invocation where you ignore the returned value:



        (void) printf( "Hello.\n" );



Next: Strong Suggestions Up: NIL/PIL Coding Guidelines Previous: Summary


neelin@bic.mni.mcgill.ca
Tue Mar 22 16:51:19 EST 1994