STYLE revision 1.1
1$NetBSD: STYLE,v 1.1 1997/04/07 23:57:10 cgd Exp $
2
3Style guide for NetBSD/alpha kernel files.
4
5This file is meant to supplement the NetBSD KNF style guide (which covers
6most of the rest of the system, and can be found in /usr/share/misc/style).
7
8
9SECTIONS
10
11	* INCLUDE FILES
12	* RCS IDS
13	* COMPILATION FLAGS
14	* MACRO DEFINITIONS
15	* BLOCKS AND EXPRESSIONS
16
17
18INCLUDE FILES
19
20(1) All C and assembly sources (which are not included by other C or
21assembly sources) sources should include <machine/options.h> as the
22first header to be included, with a line like:
23
24#include <machine/options.h>		/* Pull in config options headers */
25
26(2) All C sources should include <sys/cdefs.h> (after <machine/options.h>,
27when it is included, otherwise as the first header to be included), with
28a line like:
29
30#include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
31
32(3) Nothing should include <sys/conf.h> directly.  Instead, <machine/conf.h>
33should be included.  It includes <sys/conf.h> and provides appropriate
34definitions for the machine-dependent devices and macros used by the Alpha
35port.
36
37
38RCS IDS
39
40(1) NetBSD RCS ID tags ($NetBSD: STYLE,v 1.1 1997/04/07 23:57:10 cgd Exp $ tags) in C sources and headers should
41appear at the top of the file in a single-line comment of the form
42
43/*<space>$NetBSD: STYLE,v 1.1 1997/04/07 23:57:10 cgd Exp $<space>*/
44
45which differs from the normal NetBSD style, in that it uses spaces
46rather than tabs to seperate the tag from the comment start and end
47delimiters.
48
49(2) All C sources should include an RCS ID tag which can be compiled into
50the binary, with a line like:
51
52__KERNEL_RCSID(0, "$NetBSD: STYLE,v 1.1 1997/04/07 23:57:10 cgd Exp $");
53
54after the inclusion of cdefs.h.  C sources which include other C sources
55should change the number '0' to a different number, so that it doesn't
56conflict with the RCS ID definitios in included sources.  Generation
57of these RCS IDs is disabled if the kernel option NO_KERNEL_RCSIDS is
58defined.
59
60
61COMPILATION FLAGS
62
63By default, NetBSD/alpha kernel files are compiled with the following gcc
64warning flags:
65
66	-Werror
67	-Wall
68	-Wstrict-prototypes
69	-Wmissing-prototypes
70	-Wno-format
71
72NetBSD/alpha kernel code should compile cleanly with those flags.  At some
73point in the future (when the nonstandard extensions have been removed
74from the kernel printf() function), -Wformat will be re-enabled, so sources
75should be able to compile with it enabled as well.
76
77
78MACRO DEFINITIONS
79
80(1) Macros which use C blocks (i.e. are of the form "{ ... expressions
81... }") should always be defined like:
82
83#define	MACRO(arg1, arg2, argN)					\
84do {								\
85	...							\
86	expressions						\
87	...							\
88} while (0)
89
90so that they behave like functions or macros which don't use blocks (e.g.
91for the purpose of "if (foo) MACRO(); else ...").
92
93
94BLOCKS AND EXPRESSIONS
95
96(1) Surround blocks with { and } more often than is absolutely necessary.
97For instance:
98
99	if (foo)
100		bar();
101
102is acceptable, but:
103
104	if (foo) {
105		bar();
106	}
107
108is preferred.  (In contrast, NetBSD KNF says that no braces are to be
109used for control statements with zero or one statements.)
110
111(2) Use extra parentheses when it makes expressions clearer.  For instance,
112
113	(foo == 10 && bar == 20)
114
115is acceptable, but:
116
117	((foo == 10) && (bar == 20))
118
119is preferred.  (In contrast, NetBSD KNF says to avoid using parentheses
120except where necessary unless the expression is very confusing without
121them.)
122