]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/man/man9/style.9
accept_filter(9): Fix a mandoc related error
[FreeBSD/FreeBSD.git] / share / man / man9 / style.9
1 .\"-
2 .\" Copyright (c) 1995-2019 The FreeBSD Project
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\"
13 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 .\" ARE DISCLAIMED.  IN NO EVENT SHALL [your name] OR CONTRIBUTORS BE LIABLE
17 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 .\" SUCH DAMAGE.
24 .\"
25 .\"     From: @(#)style 1.14 (Berkeley) 4/28/95
26 .\" $FreeBSD$
27 .\"
28 .Dd October 28, 2020
29 .Dt STYLE 9
30 .Os
31 .Sh NAME
32 .Nm style
33 .Nd "kernel source file style guide"
34 .Sh DESCRIPTION
35 This file specifies the preferred style for kernel source files in the
36 .Fx
37 source tree.
38 It is also a guide for the preferred userland code style.
39 Many of the style rules are implicit in the examples.
40 Be careful to check the examples before assuming that
41 .Nm
42 is silent on an issue.
43 .Bd -literal
44 /*
45  * Style guide for FreeBSD.  Based on the CSRG's KNF (Kernel Normal Form).
46  *
47  *      @(#)style       1.14 (Berkeley) 4/28/95
48  * $FreeBSD$
49  */
50
51 /*
52  * VERY important single-line comments look like this.
53  */
54
55 /* Most single-line comments look like this. */
56
57 /*
58  * Multi-line comments look like this.  Make them real sentences.  Fill
59  * them so they look like real paragraphs.
60  */
61 .Ed
62 .Pp
63 The copyright header should be a multi-line comment, with the first
64 line of the comment having a dash after the star like so:
65 .Bd -literal
66 /*-
67  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
68  *
69  * Copyright (c) 1984-2025 John Q. Public
70  *
71  * Long, boring license goes here, but trimmed for brevity
72  */
73 .Ed
74 .Pp
75 An automatic script collects license information from the tree for
76 all comments that start in the first column with
77 .Dq Li "/*-" .
78 If you desire to flag
79 .Xr indent 1
80 to not reformat a comment that starts in the first column which is not a
81 license or copyright notice, change the dash to a star for those
82 comments.
83 Comments starting in columns other than the first are never
84 considered license statements.
85 Use the appropriate SPDX-License-Identifier line before the copyright.
86 If the copyright assertion contains the phrase
87 .Dq Li "All Rights Reserved"
88 that should be on the same line as the word
89 .Dq Li "Copyright" .
90 You should not insert a new copyright line between an old
91 copyright line and this phrase.
92 Instead, you should insert a new copyright phrase after
93 a pre-existing
94 .Dq Li "All Rights Reserved"
95 line.
96 When making changes, it is acceptable to fold an
97 .Dq Li "All Rights Reserved"
98 line with each of the
99 .Dq Li "Copyright"
100 lines.
101 For files that have the
102 .Dq Li "All Rights Reserved"
103 line on the same line(s) as the word
104 .Dq Li "Copyright" ,
105 new copyright assertions should be added last.
106 New
107 .Dq Li "Copyright"
108 lines should only be added when making substantial changes to the file,
109 not for trivial changes.
110 .Pp
111 After any copyright and license comment, there is a blank line, and the
112 .Li $\&FreeBSD$
113 for non C/C++ language source files.
114 Version control system ID tags should only exist once in a file
115 (unlike in this one).
116 Non-C/C++ source files follow the example above, while C/C++ source files
117 follow the one below.
118 All VCS (version control system) revision identification in files obtained
119 from elsewhere should be maintained, including, where applicable, multiple IDs
120 showing a file's history.
121 In general, do not edit foreign IDs or their infrastructure.
122 Unless otherwise wrapped (such as
123 .Dq Li "#if defined(LIBC_SCCS)" ) ,
124 enclose both in
125 .Dq Li "#if 0 ... #endif"
126 to hide any uncompilable bits
127 and to keep the IDs out of object files.
128 Only add
129 .Dq Li "From: "
130 in front of foreign VCS IDs if the file is renamed.
131 .Bd -literal
132 /* From: @(#)style      1.14 (Berkeley) 4/28/95 */
133
134 #include <sys/cdefs.h>
135 __FBSDID("$FreeBSD$");
136 .Ed
137 .Pp
138 Leave one blank line before the header files.
139 .Pp
140 Kernel include files
141 .Pa ( sys/*.h )
142 come first.
143 If
144 .In sys/cdefs.h
145 is needed for
146 .Fn __FBSDID ,
147 include it first.
148 If either
149 .In sys/types.h
150 or
151 .In sys/param.h
152 is needed, include it before other include files.
153 .Po
154 .In sys/param.h
155 includes
156 .In sys/types.h ;
157 do not include both.
158 .Pc
159 Next, include
160 .In sys/systm.h ,
161 if needed.
162 The remaining kernel headers should be sorted alphabetically.
163 .Bd -literal
164 #include <sys/types.h>  /* Non-local includes in angle brackets. */
165 #include <sys/systm.h>
166 #include <sys/endian.h>
167 #include <sys/lock.h>
168 #include <sys/queue.h>
169 .Ed
170 .Pp
171 For a network program, put the network include files next.
172 .Bd -literal
173 #include <net/if.h>
174 #include <net/if_dl.h>
175 #include <net/route.h>
176 #include <netinet/in.h>
177 #include <protocols/rwhod.h>
178 .Ed
179 .Pp
180 Do not include files from
181 .Pa /usr/include
182 in the kernel.
183 .Pp
184 Leave a blank line before the next group, the
185 .Pa /usr/include
186 files,
187 which should be sorted alphabetically by name.
188 .Bd -literal
189 #include <stdio.h>
190 .Ed
191 .Pp
192 Global pathnames are defined in
193 .In paths.h .
194 Pathnames local
195 to the program go in
196 .Qq Pa pathnames.h
197 in the local directory.
198 .Bd -literal
199 #include <paths.h>
200 .Ed
201 .Pp
202 Leave another blank line before the local include files.
203 .Bd -literal
204 #include "pathnames.h"          /* Local includes in double quotes. */
205 .Ed
206 .Pp
207 Do not
208 .Ic #define
209 or declare names in the implementation namespace except
210 for implementing application interfaces.
211 .Pp
212 The names of
213 .Dq unsafe
214 macros (ones that have side effects), and the names of macros for
215 manifest constants, are all in uppercase.
216 The expansions of expression-like macros are either a single token
217 or have outer parentheses.
218 Put a single tab character between the
219 .Ic #define
220 and the macro name.
221 If a macro is an inline expansion of a function, the function name is
222 all in lowercase and the macro has the same name all in uppercase.
223 .\" XXX the above conflicts with ANSI style where the names are the
224 .\" same and you #undef the macro (if any) to get the function.
225 .\" It is not followed for MALLOC(), and not very common if inline
226 .\" functions are used.
227 Right-justify the
228 backslashes; it makes it easier to read.
229 If the macro encapsulates a compound statement, enclose it in a
230 .Ic do
231 loop,
232 so that it can safely be used in
233 .Ic if
234 statements.
235 Any final statement-terminating semicolon should be
236 supplied by the macro invocation rather than the macro, to make parsing easier
237 for pretty-printers and editors.
238 .Bd -literal
239 #define MACRO(x, y) do {                                                \e
240         variable = (x) + (y);                                           \e
241         (y) += 2;                                                       \e
242 } while (0)
243 .Ed
244 .Pp
245 When code is conditionally compiled using
246 .Ic #ifdef
247 or
248 .Ic #if ,
249 a comment may be added following the matching
250 .Ic #endif
251 or
252 .Ic #else
253 to permit the reader to easily discern where conditionally compiled code
254 regions end.
255 This comment should be used only for (subjectively) long regions, regions
256 greater than 20 lines, or where a series of nested
257 .Ic #ifdef 's
258 may be confusing to the reader.
259 The comment should be separated from the
260 .Ic #endif
261 or
262 .Ic #else
263 by a single space.
264 For short conditionally compiled regions, a closing comment should not be
265 used.
266 .Pp
267 The comment for
268 .Ic #endif
269 should match the expression used in the corresponding
270 .Ic #if
271 or
272 .Ic #ifdef .
273 The comment for
274 .Ic #else
275 and
276 .Ic #elif
277 should match the inverse of the expression(s) used in the preceding
278 .Ic #if
279 and/or
280 .Ic #elif
281 statements.
282 In the comments, the subexpression
283 .Dq Li defined(FOO)
284 is abbreviated as
285 .Dq Li FOO .
286 For the purposes of comments,
287 .Dq Ic #ifndef Li FOO
288 is treated as
289 .Dq Ic #if Li !defined(FOO) .
290 .Bd -literal
291 #ifdef KTRACE
292 #include <sys/ktrace.h>
293 #endif
294
295 #ifdef COMPAT_43
296 /* A large region here, or other conditional code. */
297 #else /* !COMPAT_43 */
298 /* Or here. */
299 #endif /* COMPAT_43 */
300
301 #ifndef COMPAT_43
302 /* Yet another large region here, or other conditional code. */
303 #else /* COMPAT_43 */
304 /* Or here. */
305 #endif /* !COMPAT_43 */
306 .Ed
307 .Pp
308 The project prefers the use of
309 .St -isoC-99
310 unsigned integer identifiers of the form
311 .Vt uintXX_t
312 rather than the older
313 .Bx Ns -style
314 integer identifiers of the form
315 .Vt u_intXX_t .
316 New code should use the former, and old code should be converted to
317 the new form if other major work is being done in that area and
318 there is no overriding reason to prefer the older
319 .Bx Ns -style .
320 Like white-space commits, care should be taken in making
321 .Vt uintXX_t
322 only commits.
323 .Pp
324 Similarly, the project prefers the use of
325 ISO C99
326 .Vt bool
327 rather than the older
328 .Vt int
329 or
330 .Vt boolean_t .
331 New code should use
332 .Vt bool ,
333 and old code may be converted if it is
334 reasonable to do so.
335 Literal values are named
336 .Dv true
337 and
338 .Dv false .
339 These are preferred to the old spellings
340 .Dv TRUE
341 and
342 .Dv FALSE .
343 Userspace code should include
344 .In stdbool.h ,
345 while kernel code should include
346 .In sys/types.h .
347 .Pp
348 Likewise, the project prefers
349 ISO C99
350 designated initializers when it makes sense to do so.
351 .Pp
352 Enumeration values are all uppercase.
353 .Bd -literal
354 enum enumtype { ONE, TWO } et;
355 .Ed
356 .Pp
357 The use of internal_underscores in identifiers is preferred over
358 camelCase or TitleCase.
359 .Pp
360 In declarations, do not put any whitespace between asterisks and
361 adjacent tokens, except for tokens that are identifiers related to
362 types.
363 (These identifiers are the names of basic types, type
364 qualifiers, and
365 .Ic typedef Ns -names
366 other than the one being declared.)
367 Separate these identifiers from asterisks using a single space.
368 .Pp
369 When declaring variables in structures, declare them sorted by use, then
370 by size (largest to smallest), and then in alphabetical order.
371 The first category normally does not apply, but there are exceptions.
372 Each one gets its own line.
373 Try to make the structure
374 readable by aligning the member names using either one or two tabs
375 depending upon your judgment.
376 You should use one tab only if it suffices to align at least 90% of
377 the member names.
378 Names following extremely long types
379 should be separated by a single space.
380 .Pp
381 Major structures should be declared at the top of the file in which they
382 are used, or in separate header files if they are used in multiple
383 source files.
384 Use of the structures should be by separate declarations
385 and should be
386 .Ic extern
387 if they are declared in a header file.
388 .Bd -literal
389 struct foo {
390         struct foo      *next;          /* List of active foo. */
391         struct mumble   amumble;        /* Comment for mumble. */
392         int             bar;            /* Try to align the comments. */
393         struct verylongtypename *baz;   /* Does not fit in 2 tabs. */
394 };
395 struct foo *foohead;                    /* Head of global foo list. */
396 .Ed
397 .Pp
398 Use
399 .Xr queue 3
400 macros rather than rolling your own lists, whenever possible.
401 Thus,
402 the previous example would be better written:
403 .Bd -literal
404 #include <sys/queue.h>
405
406 struct foo {
407         LIST_ENTRY(foo) link;           /* Use queue macros for foo lists. */
408         struct mumble   amumble;        /* Comment for mumble. */
409         int             bar;            /* Try to align the comments. */
410         struct verylongtypename *baz;   /* Does not fit in 2 tabs. */
411 };
412 LIST_HEAD(, foo) foohead;               /* Head of global foo list. */
413 .Ed
414 .Pp
415 Avoid using typedefs for structure types.
416 Typedefs are problematic because they do not properly hide their
417 underlying type; for example you need to know if the typedef is
418 the structure itself or a pointer to the structure.
419 In addition they must be declared exactly once, whereas an
420 incomplete structure type can be mentioned as many times as
421 necessary.
422 Typedefs are difficult to use in stand-alone header files:
423 the header that defines the typedef must be included
424 before the header that uses it, or by the header that uses
425 it (which causes namespace pollution), or there must be a
426 back-door mechanism for obtaining the typedef.
427 .Pp
428 When convention requires a
429 .Ic typedef ,
430 make its name match the struct tag.
431 Avoid typedefs ending in
432 .Dq Li _t ,
433 except as specified in Standard C or by POSIX.
434 .Bd -literal
435 /* Make the structure name match the typedef. */
436 typedef struct bar {
437         int     level;
438 } BAR;
439 typedef int             foo;            /* This is foo. */
440 typedef const long      baz;            /* This is baz. */
441 .Ed
442 .Pp
443 All functions are prototyped somewhere.
444 .Pp
445 Function prototypes for private functions (i.e., functions not used
446 elsewhere) go at the top of the first source module.
447 Functions
448 local to one source module should be declared
449 .Ic static .
450 .Pp
451 Functions used from other parts of the kernel are prototyped in the
452 relevant include file.
453 Function prototypes should be listed in a logical order, preferably
454 alphabetical unless there is a compelling reason to use a different
455 ordering.
456 .Pp
457 Functions that are used locally in more than one module go into a
458 separate header file, e.g.,
459 .Qq Pa extern.h .
460 .Pp
461 Do not use the
462 .Dv __P
463 macro.
464 .Pp
465 In general code can be considered
466 .Dq "new code"
467 when it makes up about 50% or more of the file(s) involved.
468 This is enough
469 to break precedents in the existing code and use the current
470 .Nm
471 guidelines.
472 .Pp
473 The kernel has a name associated with parameter types, e.g., in the kernel
474 use:
475 .Bd -literal
476 void    function(int fd);
477 .Ed
478 .Pp
479 In header files visible to userland applications, prototypes that are
480 visible must use either
481 .Dq protected
482 names (ones beginning with an underscore)
483 or no names with the types.
484 It is preferable to use protected names.
485 E.g., use:
486 .Bd -literal
487 void    function(int);
488 .Ed
489 .Pp
490 or:
491 .Bd -literal
492 void    function(int _fd);
493 .Ed
494 .Pp
495 Prototypes may have an extra space after a tab to enable function names
496 to line up:
497 .Bd -literal
498 static char     *function(int _arg, const char *_arg2, struct foo *_arg3,
499                     struct bar *_arg4);
500 static void      usage(void);
501
502 /*
503  * All major routines should have a comment briefly describing what
504  * they do.  The comment before the "main" routine should describe
505  * what the program does.
506  */
507 int
508 main(int argc, char *argv[])
509 {
510         char *ep;
511         long num;
512         int ch;
513 .Ed
514 .Pp
515 For consistency,
516 .Xr getopt 3
517 should be used to parse options.
518 Options
519 should be sorted in the
520 .Xr getopt 3
521 call and the
522 .Ic switch
523 statement, unless
524 parts of the
525 .Ic switch
526 cascade.
527 Elements in a
528 .Ic switch
529 statement that cascade should have a
530 .Li FALLTHROUGH
531 comment.
532 Numerical arguments should be checked for accuracy.
533 Code which is unreachable for non-obvious reasons may be marked /*
534 .Li NOTREACHED
535 */.
536 .Bd -literal
537         while ((ch = getopt(argc, argv, "abNn:")) != -1)
538                 switch (ch) {           /* Indent the switch. */
539                 case 'a':               /* Do not indent the case. */
540                         aflag = 1;      /* Indent case body one tab. */
541                         /* FALLTHROUGH */
542                 case 'b':
543                         bflag = 1;
544                         break;
545                 case 'N':
546                         Nflag = 1;
547                         break;
548                 case 'n':
549                         num = strtol(optarg, &ep, 10);
550                         if (num <= 0 || *ep != '\e0') {
551                                 warnx("illegal number, -n argument -- %s",
552                                     optarg);
553                                 usage();
554                         }
555                         break;
556                 case '?':
557                 default:
558                         usage();
559                 }
560         argc -= optind;
561         argv += optind;
562 .Ed
563 .Pp
564 Space after keywords
565 .Pq Ic if , while , for , return , switch .
566 Two styles of braces
567 .Ql ( \&{
568 and
569 .Ql \&} )
570 are allowed for single line statements.
571 Either they are used for all single statements, or
572 they are used only where needed for clarity.
573 Usage within a function should be consistent.
574 Forever loops are done with
575 .Ic for Ns 's ,
576 not
577 .Ic while Ns 's .
578 .Bd -literal
579         for (p = buf; *p != '\e0'; ++p)
580                 ;       /* nothing */
581         for (;;)
582                 stmt;
583         for (;;) {
584                 z = a + really + long + statement + that + needs +
585                     two + lines + gets + indented + four + spaces +
586                     on + the + second + and + subsequent + lines;
587         }
588         for (;;) {
589                 if (cond)
590                         stmt;
591         }
592         if (val != NULL)
593                 val = realloc(val, newsize);
594 .Ed
595 .Pp
596 Parts of a
597 .Ic for
598 loop may be left empty.
599 .Bd -literal
600         for (; cnt < 15; cnt++) {
601                 stmt1;
602                 stmt2;
603         }
604 .Ed
605 .Pp
606 A
607 .Ic for
608 loop may declare and initialize its counting variable.
609 .Bd -literal
610         for (int i = 0; i < 15; i++) {
611                 stmt1;
612         }
613 .Ed
614 .Pp
615 Indentation is an 8 character tab.
616 Second level indents are four spaces.
617 If you have to wrap a long statement, put the operator at the end of the
618 line.
619 .Bd -literal
620         while (cnt < 20 && this_variable_name_is_too_long &&
621             ep != NULL)
622                 z = a + really + long + statement + that + needs +
623                     two + lines + gets + indented + four + spaces +
624                     on + the + second + and + subsequent + lines;
625 .Ed
626 .Pp
627 Do not add whitespace at the end of a line, and only use tabs
628 followed by spaces
629 to form the indentation.
630 Do not use more spaces than a tab will produce
631 and do not use spaces in front of tabs.
632 .Pp
633 Closing and opening braces go on the same line as the
634 .Ic else .
635 Braces that are not necessary may be left out.
636 .Bd -literal
637         if (test)
638                 stmt;
639         else if (bar) {
640                 stmt;
641                 stmt;
642         } else
643                 stmt;
644 .Ed
645 .Pp
646 No spaces after function names.
647 Commas have a space after them.
648 No spaces
649 after
650 .Ql \&(
651 or
652 .Ql \&[
653 or preceding
654 .Ql \&]
655 or
656 .Ql \&)
657 characters.
658 .Bd -literal
659         error = function(a1, a2);
660         if (error != 0)
661                 exit(error);
662 .Ed
663 .Pp
664 Unary operators do not require spaces, binary operators do.
665 Do not use parentheses unless they are required for precedence or unless the
666 statement is confusing without them.
667 Remember that other people may
668 confuse easier than you.
669 Do YOU understand the following?
670 .Bd -literal
671         a = b->c[0] + ~d == (e || f) || g && h ? i : j >> 1;
672         k = !(l & FLAGS);
673 .Ed
674 .Pp
675 Exits should be 0 on success, or 1 on failure.
676 .Bd -literal
677         exit(0);        /*
678                          * Avoid obvious comments such as
679                          * "Exit 0 on success."
680                          */
681 }
682 .Ed
683 .Pp
684 The function type should be on a line by itself
685 preceding the function.
686 The opening brace of the function body should be
687 on a line by itself.
688 .Bd -literal
689 static char *
690 function(int a1, int a2, float fl, int a4, struct bar *bar)
691 {
692 .Ed
693 .Pp
694 When declaring variables in functions declare them sorted by size,
695 then in alphabetical order; multiple ones per line are okay.
696 If a line overflows reuse the type keyword.
697 Variables may be initialized where declared especially when they
698 are constant for the rest of the scope.
699 Declarations may be placed before executable lines at the start
700 of any block.
701 Calls to complicated functions should be avoided when initializing variables.
702 .Bd -literal
703         struct foo one, *two;
704         struct baz *three = bar_get_baz(bar);
705         double four;
706         int *five, six;
707         char *seven, eight, nine, ten, eleven, twelve;
708
709         four = my_complicated_function(a1, f1, a4);
710 .Ed
711 .Pp
712 Do not declare functions inside other functions; ANSI C says that
713 such declarations have file scope regardless of the nesting of the
714 declaration.
715 Hiding file declarations in what appears to be a local
716 scope is undesirable and will elicit complaints from a good compiler.
717 .Pp
718 Casts and
719 .Ic sizeof Ns 's
720 are not followed by a space.
721 Note that
722 .Xr indent 1
723 does not understand this rule.
724 .Ic sizeof Ns 's
725 are written with parenthesis always.
726 The redundant parenthesis rules do not apply to
727 .Fn sizeof var
728 instances.
729 .Pp
730 .Dv NULL
731 is the preferred null pointer constant.
732 Use
733 .Dv NULL
734 instead of
735 .Vt ( "type *" ) Ns 0
736 or
737 .Vt ( "type *" ) Ns Dv NULL
738 in contexts where the compiler knows the
739 type, e.g., in assignments.
740 Use
741 .Vt ( "type *" ) Ns Dv NULL
742 in other contexts,
743 in particular for all function args.
744 (Casting is essential for
745 variadic args and is necessary for other args if the function prototype
746 might not be in scope.)
747 Test pointers against
748 .Dv NULL ,
749 e.g., use:
750 .Bd -literal
751 (p = f()) == NULL
752 .Ed
753 .Pp
754 not:
755 .Bd -literal
756 !(p = f())
757 .Ed
758 .Pp
759 Do not use
760 .Ic \&!
761 for tests unless it is a boolean, e.g., use:
762 .Bd -literal
763 if (*p == '\e0')
764 .Ed
765 .Pp
766 not:
767 .Bd -literal
768 if (!*p)
769 .Ed
770 .Pp
771 Routines returning
772 .Vt "void *"
773 should not have their return values cast
774 to any pointer type.
775 .Pp
776 Values in
777 .Ic return
778 statements should be enclosed in parentheses.
779 .Pp
780 Use
781 .Xr err 3
782 or
783 .Xr warn 3 ,
784 do not roll your own.
785 .Bd -literal
786         if ((four = malloc(sizeof(struct foo))) == NULL)
787                 err(1, (char *)NULL);
788         if ((six = (int *)overflow()) == NULL)
789                 errx(1, "number overflowed");
790         return (eight);
791 }
792 .Ed
793 .Pp
794 When converting K&R style declarations to ANSI style, preserve
795 any comments about parameters.
796 .Pp
797 Long parameter lists are wrapped with a normal four space indent.
798 .Pp
799 Variable numbers of arguments should look like this:
800 .Bd -literal
801 #include <stdarg.h>
802
803 void
804 vaf(const char *fmt, ...)
805 {
806         va_list ap;
807
808         va_start(ap, fmt);
809         STUFF;
810         va_end(ap);
811         /* No return needed for void functions. */
812 }
813
814 static void
815 usage(void)
816 {
817         /* Optional blank line goes here. */
818 .Ed
819 .Pp
820 Optionally, insert a blank line at the beginning of functions with no local
821 variables.
822 Older versions of this
823 .Nm
824 document required the blank line convention, so it is widely used in existing
825 code.
826 .Pp
827 Do not insert a blank line at the beginning of functions with local variables.
828 Instead, these should have local variable declarations first, followed by one
829 blank line, followed by the first statement.
830 .Pp
831 Use
832 .Xr printf 3 ,
833 not
834 .Xr fputs 3 ,
835 .Xr puts 3 ,
836 .Xr putchar 3 ,
837 whatever; it is faster and usually cleaner, not
838 to mention avoiding stupid bugs.
839 .Pp
840 Usage statements should look like the manual pages
841 .Sx SYNOPSIS .
842 The usage statement should be structured in the following order:
843 .Bl -enum
844 .It
845 Options without operands come first,
846 in alphabetical order,
847 inside a single set of brackets
848 .Ql ( \&[
849 and
850 .Ql \&] ) .
851 .It
852 Options with operands come next,
853 also in alphabetical order,
854 with each option and its argument inside its own pair of brackets.
855 .It
856 Required arguments
857 (if any)
858 are next,
859 listed in the order they should be specified on the command line.
860 .It
861 Finally,
862 any optional arguments should be listed,
863 listed in the order they should be specified,
864 and all inside brackets.
865 .El
866 .Pp
867 A bar
868 .Pq Ql \&|
869 separates
870 .Dq either-or
871 options/arguments,
872 and multiple options/arguments which are specified together are
873 placed in a single set of brackets.
874 .Bd -literal -offset 4n
875 "usage: f [-aDde] [-b b_arg] [-m m_arg] req1 req2 [opt1 [opt2]]\en"
876 "usage: f [-a | -b] [-c [-dEe] [-n number]]\en"
877 .Ed
878 .Bd -literal
879         (void)fprintf(stderr, "usage: f [-ab]\en");
880         exit(1);
881 }
882 .Ed
883 .Pp
884 Note that the manual page options description should list the options in
885 pure alphabetical order.
886 That is, without regard to whether an option takes arguments or not.
887 The alphabetical ordering should take into account the case ordering
888 shown above.
889 .Pp
890 New core kernel code should be reasonably compliant with the
891 .Nm
892 guides.
893 The guidelines for third-party maintained modules and device drivers are more
894 relaxed but at a minimum should be internally consistent with their style.
895 .Pp
896 Stylistic changes (including whitespace changes) are hard on the source
897 repository and are to be avoided without good reason.
898 Code that is approximately
899 .Fx
900 KNF
901 .Nm
902 compliant in the repository must not diverge from compliance.
903 .Pp
904 Whenever possible, code should be run through a code checker
905 (e.g., various static analyzers or
906 .Nm cc Fl Wall )
907 and produce minimal warnings.
908 .Pp
909 New code should use
910 .Fn _Static_assert
911 instead of the older
912 .Fn CTASSERT .
913 .Sh FILES
914 .Bl -tag -width indent
915 .It Pa /usr/src/tools/tools/editing/freebsd.el
916 An Emacs plugin to follow the
917 .Fx
918 .Nm
919 indentation rules.
920 .It Pa /usr/src/tools/tools/editing/freebsd.vim
921 A Vim plugin to follow the
922 .Fx
923 .Nm
924 indentation rules.
925 .El
926 .Sh SEE ALSO
927 .Xr indent 1 ,
928 .Xr err 3 ,
929 .Xr warn 3 ,
930 .Xr style.Makefile 5 ,
931 .Xr style.mdoc 5 ,
932 .Xr style.lua 9
933 .Sh HISTORY
934 This manual page is largely based on the
935 .Pa src/admin/style/style
936 file from the
937 .Bx 4.4 Lite2
938 release, with occasional updates to reflect the current practice and
939 desire of the
940 .Fx
941 project.
942 .Pa src/admin/style/style
943 is a codification by the CSRG of the programming style of Ken Thompson and
944 Dennis Ritchie in
945 .At v6 .