| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- The following guidelines are intended to aid programmers in creating
- code that is consistent with the existing core plugins.
- The primary goals of these standards are internal consistency, and
- readability in a wide range of environments.
- 1. C Language Programming
- All code should comply with the requirements of the Free Software
- Foundation Coding standards (which are currently available at
- http://www.gnu.org/prep/standards_toc.html). We also follow most of
- the FSF guidelines. Developers may suggest deviations from the FSF
- style recommendations, which will be considered by open discussion on
- the nagiosplug-devel mailing list. Any such deviations will apply to
- the entire code base to ensure consistency.
- Currently, the exceptions to FSF recommendations are roughly equivalent
- to GNU indent with invoked as 'indent -ts 2 -br'. Specifically, the
- exceptions are as follows:
- a) leading white space for a statement should be formatted as tabs,
- with one tab for each code indentation level.
- b) in statement continuation lines, format whitespace up to the column
- starting the statement as tabs, format the rest as spaces (this
- results in code that is legible regardless of tab-width setting).
- c) with the exception of the above, tabs should generally be avoided
- d) when tab width is 2 spaces, line-length should not exceed 80
- characters
- e) The opening brace of an if or while block is on the same line as
- the end of the conditional expression (the '-br' option).
- 2. Perl Language Programming
- Taken from the O'Reilly book "Programming Perl" (3rd edition, pages 604-606) with
- modifications for clarity and to cohere with C coding standards.
- *) Always check the return code of system calls.
- a) Use tab indentation.
- b) Put space before the opening brace of a multiline block.
- c) A short block may be put on one line, including braces.
- d) Never omit the semicolon.
- e) Surround most operators with space.
- $x = 5; # do this
- $y=5; # don't do this
- f) Surround a "complex" subscript (inside brackets) with space.
- g) Put empty lines between chunks of code that do different things.
- *) Always check the return code of system calls.
- h) Put a newline between closing brace and else or elsif.
- i) Do not put space between a function name and its opening parenthesis.
- j) Do not put space before a semicolon.
- k) Put space after each comma.
- l) Break long lines after an operator (but before 'and' and 'or', even when
- spelled as && and ||)).
- *) Always check the return code of system calls.
- m) Line up corresponding items vertically.
- n) Use redundant parentheses only where it increases readability.
- o) An opening brace should be put on the same line as its preceding keyword,
- if possible; otherwise, line them up vertically.
- while ($condition) {
- # do something
- }
- while ($this_condition and $that_condition and $some_other_condition
- and $this_really_really_really_long_condition)
- {
- # do something
- }
- p) Do things the most readable way. For instance:
- open(FOO, $foo) or die "Can't open $foo: $!";
- is better than
- die "Can't open $foo: $!" unless open(FOO, $foo);
- because the second way hides the main point of the statement in a modifier.
- q) Just because an operator lets you assume default arguments doesn't mean
- that you should always use them. The defaults are there for lazy programmers
- writing one-shot, non-shared programs. If you want your program to be readable,
- consider supplying the argument.
- r) Choose mnemonic identifiers. That is, don't name your variables $h, $c
- and $w. Try $hostaddress, $critical and $warning instead ($host, $crit and
- $warn is OK too).
- s) Use underscore to split words in long identifiers. That is, use
- $service_port instead of $ServicePort as the former is much more readable.
- *) Always check the return code of system calls.
|