Programming notes: Difference between revisions

From csml-wiki.northwestern.edu
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 13: Line 13:
}
}
</pre>
</pre>
Far cleaner is this:
Much cleaner is this:
<pre>
<pre>
if (i==2)
if (i==2)
Line 40: Line 40:


<li>
<li>
The following is an amazingly common programming mistake:
The following is a surprisingly common programming mistake:
<pre>
<pre>
double x, y;
double x, y;
Line 51: Line 51:
<pre>
<pre>
#define EPS 1e-9 /* or some other threshold small enough for your purposes */
#define EPS 1e-9 /* or some other threshold small enough for your purposes */

double x, y;
double x, y;
if (fabs(x-y) < EPS)
if (fabs(x-y) < EPS)

Revision as of 22:44, 27 June 2014

This is a collection of miscellaneous thoughts on coding style recommended for use in our lab.

Notes on C

  1. Don't put multiple commands on a single line. One command per line.
  2. For symmetry reasons, I dislike this layout:
    if (i==2){
            i++;
    }
    

    Much cleaner is this:

    if (i==2)
    {
            i++;
    }
    
  3. For clarity, I prefer indentations to be 8 spaces (not 4). If you follow this, you'll be in good company. Insert the following snippet in your ~/.emacs file:
    (defconst my-c-style
            '((c-basic-offset       . 8)
              (c-offsets-alist      . ((substatement-open . 0)
                                      )
              )
             )
     "C Style")
    (defun my-c-mode-common-hook ()
            (c-add-style "personal" my-c-style t)
            (setq fill-column 135)
    )
    (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
    
  4. The following is a surprisingly common programming mistake:
    double x, y;
    if (x == y)
    {
            do_something();
    }
    

    Due to rounding errors, you should not test for exact equality between two floating point numbers (or a floating point number and a constant). Instead, do:

    #define EPS 1e-9 /* or some other threshold small enough for your purposes */
    
    double x, y;
    if (fabs(x-y) < EPS)
    {
            do_something();
    }