Module Name:    src
Committed By:   riastradh
Date:           Thu Mar 30 10:39:31 UTC 2023

Modified Files:
        src/share/misc: style

Log Message:
style(5): Forbid extern in .c files.

Discussed on tech-userlevel (bcc tech-kern):
https://mail-index.netbsd.org/tech-userlevel/2023/03/15/msg013727.html


To generate a diff of this commit:
cvs rdiff -u -r1.68 -r1.69 src/share/misc/style

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/misc/style
diff -u src/share/misc/style:1.68 src/share/misc/style:1.69
--- src/share/misc/style:1.68	Tue Feb 14 18:56:10 2023
+++ src/share/misc/style	Thu Mar 30 10:39:30 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: style,v 1.68 2023/02/14 18:56:10 jschauma Exp $ */
+/* $NetBSD: style,v 1.69 2023/03/30 10:39:30 riastradh Exp $ */
 
 /*
  * The revision control tag appears first, with a blank line after it.
@@ -30,7 +30,7 @@
 #include <sys/cdefs.h>
 __COPYRIGHT("@(#) Copyright (c) 2008\
  The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: style,v 1.68 2023/02/14 18:56:10 jschauma Exp $");
+__RCSID("$NetBSD: style,v 1.69 2023/03/30 10:39:30 riastradh Exp $");
 
 /*
  * VERY important single-line comments look like this.
@@ -56,6 +56,23 @@ __RCSID("$NetBSD: style,v 1.68 2023/02/1
  */
 #ifndef _SYS_SOCKET_H_
 #define _SYS_SOCKET_H_
+
+/*
+ * extern declarations must only appear in header files, not in .c
+ * files, so the same declaration is used by the .c file defining it
+ * and the .c file using it, giving the compiler the opportunity to
+ * detect type errors.
+ *
+ * extern function declarations should not use the extern keyword,
+ * which is unnecessary.
+ *
+ * Exception: A subroutine written in assembly in an adjacent .S file,
+ * which is used only in one .c file, may be declared in the .c file.
+ */
+extern int frotz;
+
+int frobnicate(const char *);
+
 /*
  * Contents of #include file go between the #ifndef and the #endif at the end.
  */
@@ -345,9 +362,11 @@ function(int a1, int a2, float fl, int a
 	 * declarations next to their first use, and initialize
 	 * opportunistically. This avoids over-initialization and
 	 * accidental bugs caused by declaration reordering.
+	 *
+	 * Never declare extern variables in .c files.  Declare them in the
+	 * appropriate .h file shared by the .c file where they are defined
+	 * and the .c file where they are used.
 	 */
-	extern u_char one;
-	extern char two;
 	struct foo three, *four;
 	double five;
 	int *six, seven;

Reply via email to