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