Difference between revisions of "OOP344 - FjXR - 20102"

From CDOT Wiki
Jump to: navigation, search
Line 170: Line 170:
 
// Body of header file here...<br/>
 
// Body of header file here...<br/>
 
'''#endif // INCLUDEGUARD_H'''<br/></p>
 
'''#endif // INCLUDEGUARD_H'''<br/></p>
 
 
 
example:
 
 
  int main
 
  {
 
    int i;
 
    int j;
 
    if (i == 0)
 
    {
 
      i = 1;
 
    }
 
  }
 

Revision as of 15:50, 31 May 2010

We are FjXR, Code fixers are ready to go!

Group member

OOP344 - FjXR - 20102
ID First Name Last Name Section Seneca Id wiki id IRC nick Blog URL
A Xiongwen Lu xlu44 A xlu44 xlu44 xlu44 my blog
B Junseok Park A Junseok jpark68 jpark68 My Blog
C Richard Hui A rhui4 Rhui4 Rhui4 My Blog
D Priya Gill A pkgill5 priya pkgill5 My Blog
E Liang Wang lwang168 A lwang168 lwang168 lwang168 my blog

Coding Style

Common Hungarian Notation Prefixes

Prefixes are often combined to form other prefixes, as when p and sz are joined to form psz, which stands for "pointer to zero-terminated string."

(See Example Below)

int nCount = 45 ;
char szUserName[20];
char* pszUserName[20];
char cLetter = 'a' ;

Prefix Data Type
b BOOL
c or ch char
clr COLORREF
cx, cy Horizontal or vertical distance
dw DWORD
h Handle
l LONG
n int
p Pointer
sz Zero-terminated string
w WORD
f float


File names

to use .cpp for implementation files and .h for header files.
Note that when including Standard C++ header files,
the option of having no file name extension is used,
i.e.: #include <iostream>.

Parentheses, braces, and indentation

the opening brace should always go on the same line as the “precursor” (by which I mean “whatever the body is about: a class, function, object definition, if statement, etc.”). This is a single, consistent rule I apply to all of the code I write, and it makes formatting much simpler. It makes the “scannability” easier – when you look at this line:


int func(int a);

you know, by the semicolon at the end of the line, that this is a declaration and it goes no further, but when you see the line:


int func(int a) {

you immediately know it’s a definition because the line finishes with an opening brace, not a semicolon. By using this approach, there’s no difference in where you place the opening parenthesis for a multi-line definition:


int func(int a) {
int b = a + 1;
return b * 2;
}


and for a single-line definition that is often used for inlines:


int func(int a) { return (a + 1) * 2; }

Placing the ‘{‘ on the next line eliminates some confusing code in complex conditionals, aiding in the scannability. Example:


if(cond1
&& cond2
&& cond3) {
statement;
}

The above has poor scannability. However,


if (cond1
&& cond2
&& cond3)
{
statement;
}

breaks up the ‘if’ from the body, resulting in better readability. Finally, it’s much easier to visually align braces when they are aligned in the same column. They visually "stick out" much better.



Identifier names

The style is quite straightforward. The first letter of an identifier is only capitalized if that identifier is a class. If it is a function or variable, then the first letter is lowercase. The rest of the identifier consists of one or more words, run together but distinguished by capitalizing each word. So a class looks like this:



class FrenchVanilla : public IceCream {

an object identifier looks like this:

FrenchVanilla myIceCreamCone(3);

and a function looks like this:

void eatIceCreamCone();

(for either a member function or a regular function).

Include guards on header files

Include guards are always used inside header files to prevent multiple inclusion of a header file during the compilation of a single .cpp file. The include guards are implemented using a preprocessor #define and checking to see that a name hasn’t already been defined. The name used for the guard is based on the name of the header file, with all letters of the file name uppercase and replacing the ‘.’ with an underscore. For example:



// IncludeGuard.h
#ifndef INCLUDEGUARD_H
#define INCLUDEGUARD_H
// Body of header file here...
#endif // INCLUDEGUARD_H