Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
terralib:convencaoprograma [2008/04/02 09:10] laercio |
terralib:convencaoprograma [2008/04/02 16:22] (current) laercio |
||
---|---|---|---|
Line 17: | Line 17: | ||
} | } | ||
</code> | </code> | ||
+ | |||
====== Preprocessador ====== | ====== Preprocessador ====== | ||
* Use '#include " ... "’ for collocated header files and '#include <...>' for external header files | * Use '#include " ... "’ for collocated header files and '#include <...>' for external header files | ||
- | * Place preprocessor include guard in header files | + | * Place preprocessor include guard (macros associadas a arquivos include) in header files |
* Use #if. . #endif and #if def . . #endif instead of "/* . . .*/" comments to hide blocks of code | * Use #if. . #endif and #if def . . #endif instead of "/* . . .*/" comments to hide blocks of code | ||
* Use macros sparingly | * Use macros sparingly | ||
* Do not use "#define" to define constants – declare static const variables instead | * Do not use "#define" to define constants – declare static const variables instead | ||
+ | |||
+ | ===== Example ===== | ||
+ | <code cpp> | ||
+ | #ifndef TE_CONNECTION_POOL_H | ||
+ | #define TE_CONNECTION_POOL_H | ||
+ | .... | ||
+ | static const float TeMaxFloat = 3.4e37; | ||
+ | .... | ||
+ | #endif // end TE_CONNECTION_POOL_H | ||
+ | </code> | ||
+ | |||
Line 30: | Line 42: | ||
* Do not define enumerations using macros or integer constants | * Do not define enumerations using macros or integer constants | ||
* Declare enumerations within a namespace or class | * Declare enumerations within a namespace or class | ||
+ | |||
+ | ===== Example ===== | ||
+ | <code cpp> | ||
+ | typedef std::pair<TeLine, double> TeLineLength; | ||
+ | typedef std::vector<lineLength> TeLineSizes; | ||
+ | |||
+ | enum TeSelectionMode | ||
+ | { | ||
+ | TeSelectionModeDefault, //!< default selection | ||
+ | TeSelectionModeTePointed, //!< object pointed | ||
+ | TeSelectionModeTeQueried, //!< object queried | ||
+ | TeSelectionModeTePointedQueried //!< object pointed and queried | ||
+ | } | ||
+ | </code> | ||
+ | |||
====== Escopo ====== | ====== Escopo ====== | ||
* Declare for-loop iteration variables inside of for statements | * Declare for-loop iteration variables inside of for statements | ||
+ | ===== Example ===== | ||
+ | <code cpp> | ||
+ | for (int i = 0; i < 10; i++) | ||
+ | </code> | ||
Line 100: | Line 130: | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | |||
====== Segurança, Cast e Conversões de Tipos ====== | ====== Segurança, Cast e Conversões de Tipos ====== | ||
- | 118. Use C++ casting operators instead of C-style casts | + | * Use C++ casting operators instead of C-style casts. Ex:<code cpp> |
- | 119. Avoid type casting and do not force others to use it | + | short a = 2000; |
- | 120. Use static-cast<> to impose non-intuitive implicit conversions | + | int b; |
- | 121. Do not use reinterpret-cast<> in portable code | + | b = (int) a; // c-like cast notation - Ok only for fundamental data types |
- | 122. Only use const-cast<> on "this" or when dealing with non-const-correct code | + | |
- | 123. Never use dynamic-cast<> as a substitute for polymorphism | + | double d = 3.14159265; |
- | 124. Use dynamic-cast<> to restore lost type information | + | int i = static_cast<int>(d); // No need for this cast |
- | 125. Always treat string literals as const char* | + | </code> |
- | 126 Use C++ streams instead of stdio function for type safety | + | * Avoid type casting and do not force others to use it. |
- | 127 Test all type conversions | + | * Use **static-cast<>** to impose non-intuitive implicit conversions |
+ | * Do not use reinterpret-cast<> in portable code | ||
+ | * Only use **const-cast<>** on "this" or when dealing with non-const-correct code | ||
+ | * Never use **dynamic-cast<>** as a substitute for polymorphism | ||
+ | * Use **dynamic-cast<>** to restore lost type information | ||
+ | * Always treat string literals as **const char*** | ||
+ | * Use C++ streams instead of stdio function for type safety. Exemplo: <code cpp> | ||
+ | const char* myMessage = "Hello World!!!"; // A string literal | ||
+ | |||
+ | printf("%s", myMessage); // Stdio function | ||
+ | std::cout << myMessage << std::endl; // Use this instead | ||
+ | </code> | ||
+ | * Test all type conversions | ||
+ | |||
+ | |||
====== Inicialização e Construção ====== | ====== Inicialização e Construção ====== | ||
- | 128 Initialize all variables | + | * Initialize all variables |
- | 129. Do not rely on the order of initialization of global objects | + | * Do not rely on the order of initialization of global objects |
- | 130. Always construct objects in a valid state | + | * Always construct objects in a valid state |
- | 131. Initialize member variables in the initializer list | + | * Initialize member variables in the initializer list |
- | 132. Initialize member variables in the order they are declared | + | * Initialize member variables in the order they are declared |
- | 133. Indicate when the declaration order of data members is significant | + | * Indicate when the declaration order of data members is significant |
- | 134. Always list any superclass constructors in the initialize list of a subclass constructor | + | * Always list any superclass constructors in the initialize list of a subclass constructor |
- | 135. Do not call virtual functions in constructors and destructors | + | * Do not call virtual functions in constructors and destructors |
- | 136 Declare and initialize static variables within functions | + | * Declare and initialize static variables within functions |
- | 137. Zero pointers after deletion | + | * Zero pointers after deletion |
- | 138. Use the new and delete operators instead of malloc() and free() | + | * Use the **new** and **delete** operators instead of **malloc()** and **free()** |
+ | |||
====== Declarações e Expressões ====== | ====== Declarações e Expressões ====== | ||
- | 139. Do not rely on operator precedence in complex expressions | + | * Do not rely on operator precedence in complex expressions |
- | 140. Use block statements in control flow constructs | + | * Use block statements in control flow constructs |
- | 141. Do not test for equality with true | + | * Do not test for equality with true |
- | 142. Replace repeated non-trivial expressions with equivalent methods | + | * Replace repeated non-trivial expressions with equivalent methods |
- | 143. Use size-t variables for simple loop iteration and array subscripts | + | * Use **size-t** variables for simple loop iteration and array subscripts |
- | 144. Use a dummy template function to eliminate warnings for unused variables | + | * Use a dummy template function to eliminate warnings for unused variables |
+ | |||
+ | |||
====== Fluxo de Controle ====== | ====== Fluxo de Controle ====== | ||
- | 145. Avoid break and continue in iteration statements | + | * Avoid **break** and **continue** in iteration statements |
- | 146 Avoid multiple return statements in functions | + | * Avoid multiple **return** statements in functions |
- | 147. Do not use goto | + | * Do not use **goto** |
- | 148. Do not use try . .throw. .catch to manage control flow | + | * Do not use **try .. throw .. catch** to manage control flow |
- | 149. Never use setjmp() or longjmp() in a C++ program | + | * Never use **setjmp()** or **longjmp()** in a C++ program |
- | 150. Always code a break statement in the last case of a switch statement | + | * Always code a **break** statement in the last case of a switch statement |
+ | |||
+ | |||
====== Manipulação de Erros e Exceções ====== | ====== Manipulação de Erros e Exceções ====== | ||
- | 151. Use return codes to report unexpected state changes | + | * Use return codes to report unexpected state changes |
- | 152. Use assertions to enforce a programming contract | + | * Use assertions to enforce a programming contract |
- | 153. Do not silently absorb or ignore unexpected runtime errors | + | * Do not silently absorb or ignore unexpected runtime errors |
- | 154. Use assertions to report unexpected or unhandled runtime errors | + | * Use assertions to report unexpected or unhandled runtime errors |
- | 155. Use exceptions to report errors that may occur under normal program execution | + | * Use exceptions to report errors that may occur under normal program execution |
- | 156 Manage resources with RAII for exception safety | + | * Manage resources with RAII for exception safety |
- | 157. Catch exceptions by reference, not by value | + | * Catch exceptions by reference, not by value |
- | 158. Do not discard exception information if you throw a new exception within a catch block | + | * Do not discard exception information if you throw a new exception within a **catch** block |
- | 159. Avoid throwing exceptions in destructors | + | * Avoid throwing exceptions in destructors |
+ | |||
====== Eficiência ====== | ====== Eficiência ====== | ||
- | 160. Use lazy evaluation and initialization | + | * Use lazy evaluation and initialization |
- | 161. Reuse objects to avoid reallocation | + | * Reuse objects to avoid reallocation |
- | 162. Leave optimization for last | + | * Leave optimization for last |