Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
twsg:dicas:code_conventions [2009/01/07 14:55] emerson |
twsg:dicas:code_conventions [2009/03/28 22:00] (current) emerson |
||
---|---|---|---|
Line 26: | Line 26: | ||
Estes componentes são discutidos brevemente nas subseções seguintes. | Estes componentes são discutidos brevemente nas subseções seguintes. | ||
+ | |||
+ | |||
==== License header ==== | ==== License header ==== | ||
Line 53: | Line 55: | ||
</code> | </code> | ||
+ | Para adicionar o //License header// a um conjunto de arquivos já existentes numa pasta, você pode usar o seguinte comando no Linux: <code bash> | ||
+ | for i in `find . -name "*.js"`; do cp $i $i.bkp; cat ../header.txt $i.bkp > $i; rm -f $i.bkp; done | ||
+ | </code> | ||
+ | Apenas altere o ''*.js'' para a extensão dos seus arquivos e crie o arquivo ''header.txt'' na pasta abaixo, com o conteúdo descrito neste tópico. Para personalizar ainda mais o comando basta olhar o funcionamento do comando ''find'' do shell. Por exemplo, você quer colocar o //License header// em todos os arquivos .h e .cpp de uma pasta, então você pode criar o ''header.txt'' com o conteúdo correto (lembrar de deixar uma linha em branco no final) e executar o seguinte comando nesta pasta: <code bash> | ||
+ | for i in `find . -name "*.h" -or -name "*.cpp"`; do cp $i $i.bkp; cat header.txt $i.bkp > $i; rm -f $i.bkp; done | ||
+ | </code> | ||
==== File identification ==== | ==== File identification ==== | ||
Line 65: | Line 73: | ||
*/ | */ | ||
</code> | </code> | ||
+ | |||
Line 70: | Line 79: | ||
==== Header file guard ==== | ==== Header file guard ==== | ||
- | As convenções do File header guard estão descritas no documento de referência. A pŕincipal alteração é a troca do prefixo ''OGWS'' por ''TERRAOGC'', segundo exemplo abaixo: | + | As convenções do File header guard estão descritas no documento de referência. A principal alteração é a troca do prefixo ''OGWS'' por ''TERRAOGC'', segundo exemplo abaixo: |
<code cpp> | <code cpp> | ||
#ifndef __TERRAOGC_COMMON_INTERNAL_TECGIUTILS_H | #ifndef __TERRAOGC_COMMON_INTERNAL_TECGIUTILS_H | ||
Line 76: | Line 85: | ||
</code> | </code> | ||
+ | |||
==== Includes section ==== | ==== Includes section ==== | ||
- | ==== Classes declaration ==== | + | A seção de includes deve seguir os seguintes princípios: |
+ | - Usar, sempre que possível, //forward declarations// | ||
+ | - Colocar primeiro os arquivos do mesmo pacotes (diretório fonte) através de aspas | ||
+ | - Colocar depois os arquivos de outros pacotes (outros diretórios) através de ''<'' e ''>'' | ||
+ | - Iniciar cada lista de pacotes (inclusive do atual) com um comentário | ||
+ | |||
+ | Exemplo: | ||
+ | <code cpp> | ||
+ | // TerraOGC WFS Utils include files | ||
+ | #include "TeWFSUtilsConfig.h" | ||
+ | |||
+ | // TerraOGC GML include files | ||
+ | #include <gml/TeGMLQuerier.h> | ||
+ | |||
+ | // Shapelib include files | ||
+ | #include <shapefil.h> | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ==== Namespace declaration ==== | ||
+ | |||
+ | Apenas inserir a declaração do namespace padrão do grupo. As //forward declarations// ocorrem antes e/ou depois desta declaração, dependendo do namespace ao qual as classes pertencem. Veja os exemplos: | ||
+ | |||
+ | - Namespace sem //forward declarations//: <code cpp> | ||
+ | |||
+ | namespace TeOGC | ||
+ | { | ||
+ | |||
+ | </code> | ||
+ | - Namespace com //forward declarations//: <code cpp> | ||
+ | // Forward declarations | ||
+ | class TeTable; | ||
+ | |||
+ | namespace TeOGC | ||
+ | { | ||
+ | // Forward declarations | ||
+ | class TeWFSInsertElement; | ||
+ | class TeWFSUpdateElement; | ||
+ | |||
+ | |||
+ | </code> | ||
+ | |||
+ | ==== Classes and Functions declarations ==== | ||
+ | |||
+ | Seguir o manual. Existem vários exemplos no próprio CVS. | ||
- | ==== Functions declaration ==== | ||
==== End header file ==== | ==== End header file ==== | ||
- | ==== Level 3 Headline ==== | + | Apenas um fecho para o arquivo. Contém o final das declarações do namespace e do file header guard. Exemplo: |
+ | <code cpp> | ||
+ | } // end namespace TeOGC | ||
+ | |||
+ | #endif // __TERRAOGC_COMMON_INTERNAL_TECGIUTILS_H | ||
+ | |||
+ | |||
+ | </code> | ||
+ | Sempre lembrar de deixar **uma linha em branco** no final do arquivo | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||