[m-dev.] for review: update c_coding_guidelines.html
Fergus Henderson
fjh at cs.mu.OZ.AU
Wed Feb 9 15:26:41 AEDT 2000
I've made some changes in response to the various review comments.
Hopefully everyone will be happy with this. I'll commit this
soon, unless I hear any objections.
----------
Estimated hours taken: 0.75
w3/information/developers/c_coding_standard.html:
- Change the recommended order of declarations in
header files: `#defines' should in general come
last, after function declarations, rather than before
type definitions.
- Say that macros should be documented.
- Document the convention of appending `_Struct'
for struct names.
- Update the pointers to documentation on memory management.
- Do not require all files to be licensed under the GPL.
Relative diff:
--- c_coding_standard.html.old Wed Feb 9 15:14:25 2000
+++ c_coding_standard.html Wed Feb 9 15:19:01 2000
@@ -112,7 +112,19 @@
<li> #defines
</ul>
-Note also that every header should be protected against multiple inclusion
+However, it probably more important to group items
+which are conceptually related than to follow this
+order strictly. Also note that #defines which define
+configuration macros used for conditional compilation
+or which define constants that are used for array sizes
+will need to come before the code that uses them.
+But in general configuration macros should be isolated
+in separate files (e.g. runtime/mercury_conf.h.in
+and runtime/mercury_conf_param.h) and fixed-length limits
+should be avoided, so those cases should not arise much.
+<p>
+
+Every header should be protected against multiple inclusion
using the following idiom:
<font color="#0000ff">
<pre>
Full diff:
Index: c_coding_standard.html
===================================================================
RCS file: /home/mercury1/repository/w3/information/developers/c_coding_standard.html,v
retrieving revision 1.1
diff -u -d -u -r1.1 c_coding_standard.html
--- c_coding_standard.html 1998/09/04 05:01:54 1.1
+++ c_coding_standard.html 2000/02/09 04:19:01
@@ -87,7 +87,7 @@
<h4>
1.2.1. Source files</h4>
-Items in source files should be in this order:
+Items in source files should in general be in this order:
<ul>
<li> Prologue comment describing the module.
<li> #includes of system headers (such as stdio.h and unistd.h)
@@ -104,15 +104,27 @@
<h4>
1.2.2. Header files</h4>
-Items in headers should be in this order:
+Items in headers should in general be in this order:
<ul>
-<li> #defines
<li> typedefs, structs, unions, enums
<li> extern variable declarations
<li> function prototypes
+<li> #defines
</ul>
-Note also that every header should be protected against multiple inclusion
+However, it probably more important to group items
+which are conceptually related than to follow this
+order strictly. Also note that #defines which define
+configuration macros used for conditional compilation
+or which define constants that are used for array sizes
+will need to come before the code that uses them.
+But in general configuration macros should be isolated
+in separate files (e.g. runtime/mercury_conf.h.in
+and runtime/mercury_conf_param.h) and fixed-length limits
+should be avoided, so those cases should not arise much.
+<p>
+
+Every header should be protected against multiple inclusion
using the following idiom:
<font color="#0000ff">
<pre>
@@ -147,14 +159,20 @@
<p>
Note: memory allocation for C code that must interface
with Mercury code or the Mercury runtime should be
-done according to the documentation in mercury/runtime/heap.h
-and the Mercury User's Guide and Mercury Language Reference Manual.
-<font color="#ff0000">
-XXX: Currently none of these say anything about it, though.
-<font color="#000000">
+done using the routines defined and documented in
+mercury/runtime/mercury_memory.h and/or mercury/runtime/heap.h,
+according to the documentation in those files,
+in mercury/trace/README, and in the Mercury Language Reference Manual.
<h4>
-2.1.2. Headers</h4>
+2.1.2. Macros</h4>
+
+Each non-trivial macro should be documented just as for functions (see above).
+It is also a good idea to document the types of macro arguments and
+return values, e.g. by including a function declaration in a comment.
+
+<h4>
+2.1.3. Headers</h4>
Such function comments should be present in header files for each function
exported from a source file. Ideally, a client of the module should
@@ -163,19 +181,19 @@
working out how an exported function works.
<h4>
-2.1.3. Source files</h4>
+2.1.4. Source files</h4>
Every source file should have a prologue comment which includes:
<ul>
<li> Copyright notice.
-<li> GNU Public Licence info.
+<li> Licence info (e.g. GPL or LGPL).
<li> Short description of the purpose of the module.
<li> Any design information or other details required to understand
and maintain the module.
</ul>
<h4>
-2.1.4. Global variables</h4>
+2.1.5. Global variables</h4>
Any global variable should be excruciatingly documented. This is
especially true when globals are exported from a module.
@@ -183,7 +201,7 @@
a global.
<h3>
-2.1. Comment style</h3>
+2.2. Comment style</h3>
Use comments of this form:
<font color="#0000ff">
@@ -202,10 +220,10 @@
<font color="#000000">
<h3>
-2.2. Guidelines for comments</h3>
+2.3. Guidelines for comments</h3>
-<h3>
-2.3. Revisits</h3>
+<h4>
+2.3.1. Revisits</h4>
Any code that needs to be revisited because it is a temporary hack
(or some other expediency) must have a comment of the form:
@@ -221,8 +239,8 @@
that can be understood by developers other than the author of the
comment.
-<h3>
-2.4. Comments on preprocessor statements</h3>
+<h4>
+2.3.2. Comments on preprocessor statements</h4>
The <tt>#ifdef</tt> constructs should
be commented like so if they extend for more than a few lines of code:
@@ -296,7 +314,7 @@
For instance, <tt>soul_machine</tt>.
<h3>
-4.2. Enums, macros and #define constants</h3>
+4.2. Enumeration constants, macros and #define constants</h3>
Use all uppercase with underscores to separate words.
For instance, <tt>MAX_HEADROOM</tt>.
@@ -309,7 +327,23 @@
For instance, <tt>Directory_Entry</tt>.
<h3>
-4.4. Mercury specifics </h3>
+4.4. Structs and unions</h3>
+
+If something is both a struct and a typedef, the
+name for the struct should be formed by appending `_Struct'
+to the typedef name:
+<font color="#0000ff">
+<pre>
+ typedef struct Directory_Entry_Struct {
+ ...
+ } DirectoryEntry;
+</pre>
+<font color="#000000">
+
+For unions, append `_Union' to the typedef name.
+
+<h3>
+4.5. Mercury specifics </h3>
For anything exported from mercury/runtime, prefix it with MR_.
For anything exported from mercury/library, prefix it with ML_.
--
Fergus Henderson <fjh at cs.mu.oz.au> | "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh> | of excellence is a lethal habit"
PGP: finger fjh at 128.250.37.3 | -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to: mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions: mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------
More information about the developers
mailing list