wxOS2 additional stylistic and coding standards.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10114 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
144
src/os2/standard.txt
Normal file
144
src/os2/standard.txt
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
This is just a note explaining the additional coding standards I use in
|
||||||
|
the OS/2 port. These are in addition to the project standards and are designed
|
||||||
|
to enhance the readability and maintenance of the code. There are two main
|
||||||
|
standards I employ and few minor ones. Indentation/columner aligned code
|
||||||
|
and variable naming are the key conventions I use.
|
||||||
|
|
||||||
|
Indentations allow for a very clean look and feel to the code as well as assisting
|
||||||
|
in debugging. This is really more a stylistic option that just makes the code
|
||||||
|
look better and easier to read. Basically I put the data declaration type to the left
|
||||||
|
and the variable in column 37 or 41 (9 or ten 4 space tabs from the left margin).
|
||||||
|
All indentations are multiples of 4. Probably the most important indentation
|
||||||
|
standard I use concerns if/else constructs.
|
||||||
|
|
||||||
|
I find code like:
|
||||||
|
|
||||||
|
if (var == 1) MyFunc();
|
||||||
|
else return FALSE;
|
||||||
|
|
||||||
|
and:
|
||||||
|
if (eVal == ENUM1) {
|
||||||
|
DoSomething();
|
||||||
|
DoSomethingElse();
|
||||||
|
} else if (eVal == ENUM2) {
|
||||||
|
DoAnotherThing();
|
||||||
|
DoSomethingElse();
|
||||||
|
} else return FALSE;
|
||||||
|
|
||||||
|
to be ugly, hard to match openning and closing braces, and a bit of pain for
|
||||||
|
some debuggers. So I use this instead:
|
||||||
|
|
||||||
|
if (var == 1)
|
||||||
|
MyFunc();
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
and:
|
||||||
|
if (eVal == ENUM1)
|
||||||
|
{
|
||||||
|
DoSomething();
|
||||||
|
DoSomethingElse();
|
||||||
|
}
|
||||||
|
else if (eVal == ENUM2)
|
||||||
|
{
|
||||||
|
DoAnotherThing();
|
||||||
|
DoSomethingElse();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
This is infinitely more readable, allows for easy matchup of openning and
|
||||||
|
closing braces and is friendlier to debuggers.
|
||||||
|
|
||||||
|
Another issue in this category is the function call with large number of parameters.
|
||||||
|
Especially if some of the parameters are function calls themselves. I find code
|
||||||
|
like
|
||||||
|
|
||||||
|
MyCall2( param, someotherparam, CallAnotherProc(), CallYetAnotherProc(), param2, param3, Yourproc(), param4);
|
||||||
|
|
||||||
|
to be ugly and hard on some debuggers and some editors/printers don't like trailing
|
||||||
|
out over 100 columns. I prefer something like this:
|
||||||
|
|
||||||
|
MyCall2( param
|
||||||
|
,someotherparam
|
||||||
|
,CallAnotherProc()
|
||||||
|
,CallYetAnotherProc()
|
||||||
|
,param2
|
||||||
|
,param3
|
||||||
|
,Yourproc()
|
||||||
|
,param4
|
||||||
|
);
|
||||||
|
|
||||||
|
Much more readable, and debugger and editor friendly.
|
||||||
|
|
||||||
|
Like I said above all that is mostly style, but below is something that I find
|
||||||
|
partiuclarly irritating about a lot of code in this and other public projects,
|
||||||
|
the haphazard and lazy use of variable names. How often have you found yourself
|
||||||
|
deep down in a large function and run across something like xd = p or CallProc(val, val2)
|
||||||
|
and you have no idea what xd or p is or where val or val2 are delcared and you
|
||||||
|
have to go spend time to find them? Waste of time. Or something like
|
||||||
|
if (val). Is val an integer you are testing for nonzero or a pointer for nonNULL?
|
||||||
|
You have to back up somewhere or into a class header to find it in order to know.
|
||||||
|
Coders that use one or two character identifiers in anything other than loop
|
||||||
|
controls are basically just lazy.
|
||||||
|
|
||||||
|
To alleviate a lot of this poor readability I have instuted the following naming
|
||||||
|
conventions in this port.
|
||||||
|
|
||||||
|
Class data members are alway preceded with a m_.
|
||||||
|
|
||||||
|
Datatype prefixes are as follows:
|
||||||
|
|
||||||
|
n -- int, short
|
||||||
|
l -- long, size_t (specific 32 bit integer)
|
||||||
|
ll -- longlong (64 bit integer)
|
||||||
|
f -- float
|
||||||
|
d -- double
|
||||||
|
w -- word
|
||||||
|
dw -- dword
|
||||||
|
h -- handle
|
||||||
|
u -- unsigned
|
||||||
|
c -- char/byte (8 bit)
|
||||||
|
z -- char* string
|
||||||
|
s -- string class string
|
||||||
|
p -- pointer
|
||||||
|
q -- smart (counted) pointer
|
||||||
|
r -- reference
|
||||||
|
a -- array
|
||||||
|
v -- user or library defined datatype (can be a struct, typedef, or even
|
||||||
|
a class variable).
|
||||||
|
|
||||||
|
So a class member that is a pointer to something is m_pVar. A pointer to an
|
||||||
|
unsigned long is a pulVal. rsVal is a reference to a string.
|
||||||
|
|
||||||
|
Also I use as many desriptive names as possible. So an int for a box width is
|
||||||
|
nWidth, not w or x. An unsigned long for a datalength is ulLength not len or l.
|
||||||
|
A class member that is a pointer to client window is m_pClient or
|
||||||
|
m_pvClient, not just client. A wxBrush is vBrush or a handle to a brush is
|
||||||
|
hBrush as opposed to br or hbr and if they were class members then m_vBrush and
|
||||||
|
m_hBrush.
|
||||||
|
|
||||||
|
Some other things you will not find in this port are things like:
|
||||||
|
|
||||||
|
Large numbers of nested function calls on one line or if statement.
|
||||||
|
|
||||||
|
Obtuse nonsense like while (*d++ = *s). What is that? Instead you will see
|
||||||
|
|
||||||
|
while (*d != '\0')
|
||||||
|
{
|
||||||
|
.
|
||||||
|
.
|
||||||
|
.
|
||||||
|
*d++;
|
||||||
|
*d = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
I hope you will find wxOS2 extremely easy to read, follow, and debug. Unlike
|
||||||
|
a lot of programmers I find writing code to be every bit as much a work of
|
||||||
|
art as of science. The neatness and appearance of one's code tells a every
|
||||||
|
bit as much about the person writing it as its functionality and correctness.
|
||||||
|
|
||||||
|
Dave Webster,
|
||||||
|
Struggling OS/2 developer.
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user