1 |
|
---|
2 | XWorkplace/WarpIN Coding Conventions
|
---|
3 | (W) Ulrich Mller, March 13, 2000
|
---|
4 | Last updated January 22, 2001 Ulrich Mller
|
---|
5 |
|
---|
6 | When adding code to XWorkplace, WarpIN, or the XWorkplace helpers,
|
---|
7 | please follow the coding conventions outlined below.
|
---|
8 |
|
---|
9 | Yes, I know everyone has his/her favorite coding style. This is
|
---|
10 | a likely topic to cause endless debate, but if you contribute to
|
---|
11 | my projects... please follow my style.
|
---|
12 |
|
---|
13 | In addition to consistency, this is very helpful for automatic code
|
---|
14 | documentation through xdoc. See tools/xdoc in the WarpIN source tree
|
---|
15 | for more about that utility.
|
---|
16 |
|
---|
17 | Here we go:
|
---|
18 |
|
---|
19 | 1. Use a tab size of 4. Use real spaces instead of tabs.
|
---|
20 |
|
---|
21 | 2. Align parameters vertically with function calls, at least
|
---|
22 | in function headers:
|
---|
23 |
|
---|
24 | int StoreExecuteRexxCode(const char *pcszName,
|
---|
25 | const char *pcszCode,
|
---|
26 | const char *pcszArgs,
|
---|
27 | char **ppszRet);
|
---|
28 |
|
---|
29 | Add xdoc documentation to all functions and parameters,
|
---|
30 | as outlined below.
|
---|
31 |
|
---|
32 | 3. Brackets style:
|
---|
33 |
|
---|
34 | if (condition)
|
---|
35 | {
|
---|
36 | // do this
|
---|
37 | }
|
---|
38 | else
|
---|
39 | {
|
---|
40 | // do that
|
---|
41 | }
|
---|
42 |
|
---|
43 | You may leave out brackets if there's only one statement
|
---|
44 | after if or else, of course, but with nested if statements,
|
---|
45 | I usually add them even in that case since it's so easy
|
---|
46 | to mismatch the nesting then.
|
---|
47 |
|
---|
48 | 4. switch/case style:
|
---|
49 |
|
---|
50 | switch (msg)
|
---|
51 | {
|
---|
52 | case WM_CREATE:
|
---|
53 | // code
|
---|
54 | break;
|
---|
55 |
|
---|
56 | case WM_DESTROY:
|
---|
57 | // code
|
---|
58 | break;
|
---|
59 | }
|
---|
60 |
|
---|
61 | 5. For all variables, use the usual OS/2 type prefixes.
|
---|
62 | Here are some:
|
---|
63 |
|
---|
64 | CHAR c (char)
|
---|
65 | PSZ psz (char* pointer)
|
---|
66 | PCSZ pcsz (const char* pointer)
|
---|
67 |
|
---|
68 | USHORT us (unsigned short)
|
---|
69 | SHORT s (short)
|
---|
70 | ULONG ul (unsigned long)
|
---|
71 | LONG l (long)
|
---|
72 | BYTE b (byte)
|
---|
73 |
|
---|
74 | BOOL f (flag)
|
---|
75 | LONG fl (for LONG's containing OR'ed flags)
|
---|
76 | SHORT fs (for SHORT's containing OR'ed flags)
|
---|
77 |
|
---|
78 | string/BSString str (C++ string class instance)
|
---|
79 |
|
---|
80 | For arrays, prefix "a" (e.g. USHORT ausThings[3]).
|
---|
81 | For pointers, prefix "p" (e.g. USHORT *pausThings[3]).
|
---|
82 |
|
---|
83 | 6. Prefix C++ class member variables with an underscore ("_").
|
---|
84 | This allows people who are not familiar with the class
|
---|
85 | interface to identify member variables easily. Also, this
|
---|
86 | has a certain consistency with SOM/WPS class member
|
---|
87 | variables.
|
---|
88 |
|
---|
89 | 7. Prefix global variables with "G_" for the same reason.
|
---|
90 | Global variables are potentially dangerous, so these
|
---|
91 | can be more easily identified.
|
---|
92 |
|
---|
93 | 8. Comment your functions in xdoc-style. See any function
|
---|
94 | in the sources for how this can be done. Basically, use
|
---|
95 | /* */-style comments before the function header and
|
---|
96 | xdoc tags in that block.
|
---|
97 |
|
---|
98 | Sorta like this:
|
---|
99 |
|
---|
100 | /*
|
---|
101 | *@@ Create:
|
---|
102 | * create something.
|
---|
103 | */
|
---|
104 |
|
---|
105 | PVOID Create(PVOID pvCreateFrom, // in: create from
|
---|
106 | PULONG pulCount) // out: new count
|
---|
107 | {
|
---|
108 | ... // code, ignored by xdoc
|
---|
109 | }
|
---|
110 |
|
---|
111 | xdoc will even take the parameter descriptions if they
|
---|
112 | are specified as above.
|
---|
113 |
|
---|
114 | tools/xdoc/readme.txt in the WarpIN sources has a more
|
---|
115 | detailed description.
|
---|
116 |
|
---|
117 | I usually only document functions in the source files,
|
---|
118 | not in the headers. Even though xdoc will find documentation
|
---|
119 | in headers also, changing headers causes recompiles,
|
---|
120 | especially with the complex include hierarchy of WarpIN.
|
---|
121 | Also, changing code documentation in the sources only
|
---|
122 | reduces the amount of code which needs to be committed
|
---|
123 | to the CVS server.
|
---|
124 |
|
---|
125 | 9. When changing code, mark the code as changed in the
|
---|
126 | xdoc comment by using something like the following:
|
---|
127 |
|
---|
128 | @@changed V0.9.2 (2000-03-10) [umoeller]: fixed memory leak
|
---|
129 | | | | | |
|
---|
130 | | | | | +-- description
|
---|
131 | | | | |
|
---|
132 | | | | +- author tag (same as CVS login)
|
---|
133 | | | |
|
---|
134 | | | +-- ISO date (year, month, day)
|
---|
135 | | |
|
---|
136 | | +-- XWorkplace/WarpIN version number
|
---|
137 | |
|
---|
138 | +-- xdoc tag ("@@changed" or "@@added")
|
---|
139 |
|
---|
140 | xdoc can create a full change log if these things are set
|
---|
141 | properly. Try "createdoc.cmd" or "createchangelog.cmd" in
|
---|
142 | the WarpIN and XWorkplace main source directories,
|
---|
143 | respectively.
|
---|
144 |
|
---|
145 | Also, this way I can do a simple search over all files
|
---|
146 | to update the readme with changes and bugfixes for the new
|
---|
147 | version.
|
---|
148 |
|
---|
149 | 10. When adding a new function, use the same, just use @@added
|
---|
150 | instead of @@changed.
|
---|
151 |
|
---|
152 | Thank you!
|
---|
153 |
|
---|
154 |
|
---|