Programando Em C_ Boas Práticas - Eletronica

download Programando Em C_ Boas Práticas - Eletronica

of 6

Transcript of Programando Em C_ Boas Práticas - Eletronica

  • 8/11/2019 Programando Em C_ Boas Prticas - Eletronica

    1/6

    3/9/2014 Programando em C: Boas Prticas - Eletronica.org

    http://www3.eletronica.org/artigos/programando-em-c-boas-praticas 1/6

    32Curtir 3 Tweetar 5

    Este artigo aborda algumas dicas que visam melhorar a legibilidade do cdigo fonte.

    Em 1972 o funcionrio da AT&T Dennis Ritchieiniciou o

    desenvolvimento de uma linguagem de programao que

    simplificasse a sua tarefa diria de programador nos

    laboratrios Bell. Chamou-a simplesmente de C, em

    referncia clara uma linguagem anterior, escrita por Ken

    Thompson, conhecida como B. Aps estar madura o

    suficiente para substituir o assembly no kernel do sistema

    Unix em 1973, a linguagem ganhou o mundo, evoluindo com

    o tempo e tornando-se referncia, mas sem perder as

    principais caractersticas que a fizeram ocupar uma posio

    de destaque.

    Este artigo pretende conversar diretamente com o

    programador, revelando algumas boas prticas que podem

    auxili-los no desenvolvimento e manuteno do cdigo. Apesar de genrico linguagem C, os tpicos abordados

    so frutos da experincia como desenvolvedor de sistemas embarcados, sendo estes o nosso foco principal.

    Mantendo Bonito

    A linguagem C, por definio, no exige que voc escreva o programa seguindo regras que o tornem esteticamente

    agradvel de ver (e ler). Nada impede voc de escrever algo como:

    /*#define ppp xp

    * /## define */#define x =

    #define zim void

    /*\**\*\***//*/ #denife $/*/

    #define p ()

    #define iu for(

    /*\**\*\***//*/ #defie $##def x^3printdf/*/

    #define xyz 5 ) {

    b += 3;

    for ( i=0; i

  • 8/11/2019 Programando Em C_ Boas Prticas - Eletronica

    3/6

    3/9/2014 Programando em C: Boas Prticas - Eletronica.org

    http://www3.eletronica.org/artigos/programando-em-c-boas-praticas 3/6

    ? cont

    : cont * -1;

    Isto ser especialmente til caso voc utilize o operador ternrio de forma encadeada. Este cdigo:

    a = ( b < z )

    ? x

    : ( i > x )

    ? i

    : ++i;

    certamente mais legvel que este:

    a = ( b < z ) ? x : ( i > x ) ? i : ++i;

    - ++ e

    Evite agregar mais de um ++ ou na mesma sentena. Com o mesmo intuito, evite atribuir ao resultado da

    operao operadores que utilizaram o incremento ou decremento na expresso.

    Portando, expresses como:

    z = a++ + ++b;

    ou

    a[b] = b++;

    devem ser evitadas e substituidas por clusulas que inibam, ou pelo menos minimizem, interpretaes errneas.

    Nmeros Mgicos

    As constantes so suas amigas, e os #define uma das mais ricas formas de melhorar a legibilidade do cdigo.

    Nmeros Mgicos so valores, inteiros ou no, que aparecem no cdigo e que so constantes, mas no foram

    declarados como tais. Fazer isso prejudica a organizao e dificulta a manuteno.

    Ao invs de ter condies como:

    while ( tensao_bateria < 30 ) {

    if ( potencia_transmissor > 50 )

    diminua_potencia();

    else {

    desliga_radio();

    while ( tensao_bateria < 30 ) { /* espera bateria carregar */ }

    liga_radio();

    }

    }

    substitua os inteiros por constantes com nomes adequados, como LIMITE_BATERIA_CRITICA e

    POTENCIA_MINIMA_TRANSMISSOR. Alm de melhorar a organizao facilita a manuteno, em caso de alteraes

    nestas constantes.

  • 8/11/2019 Programando Em C_ Boas Prticas - Eletronica

    4/6

    3/9/2014 Programando em C: Boas Prticas - Eletronica.org

    http://www3.eletronica.org/artigos/programando-em-c-boas-praticas 4/6

    Loops Parados

    Utilizando o exemplo anterior, observe que escrevemos

    while ( tensao_bateria < 30 ) { /* espera bateria carregar */ }

    ao invs de simplesmente

    while ( tensao_bateria < 30 );

    A primeira forma deixa explcita a nossa inteno, ao contrrio da segunda, que poderia ser confundida com um

    erro do programador ou causar problemas posteriormente, caso o ; fosse erroneamente removido (possivelmente

    sem erro na compilao).

    Convenes

    No importa exatamente quais convenes voc utiliza, o importante que voc defina uma (prpria ou no) e siga-

    a da forma mais rigorosa possvel. Preferencialmente estas convenes devem ser descritas em um documentosimples, que permita consultas rpidas sempre que necessrio. Exemplificarei algumas abaixo que so bastante

    populares, mas voc deve adapt-las s suas necessidades.

    - Constantes: para as constantes utilize sempre letras maisculas. Desta forma ser fcil distingui-la entre as variveis.

    Ex.:

    #define LIMITE_TEMPERATURA 40

    #define BATERIA_BAIXA 30

    - Variveis: mais importante que as convenes, uma regra bsica: utilize nomes claros para as variveis, abreviando

    apenas o que bastante conhecido ou bvio. Programadores so, em sua maioria, geis no teclado. Portanto,

    abreviar pressaoMotorEsquerdo para preMotE provavemente no vai economizar muito do seu tempo durante o

    desenvolvimento e certamente dificultar a leitura do cdigo.

    Existem algumas convenes mais antigas como a Notao Hngaraou mais modernas, como a Notao Camelo,

    muito utilizada na programao orientada a objetos. Usualmente, em C, bastante comum todas as variveis serem

    escritas com letras minsculas e/ou com o _ como separador de palavras. Sendo assim, variveis como

    velocidademaxima ou velocidade_maxima so bastante comuns, sendo esta ltima forma mais freqente.

    - Tipos de Variveis: uma das grandes vantagens da linguagem C a portabilidade entre arquiteturas. No entanto,

    alguns tipos de variveis possuem comprimento varivel dependendo da arquitetura e compilador, o que pode

    ocasionar problemas no software, como overflow ou erros de converses. Por exemplo, o tipo inteiro (int)

    normalmente representa o tamanho da palavra do processador, nos processadores modernos de 32 e 64 bit e

    compiladores como o GCC. Mas isso no necessariamente uma regra; no compilador HITECH para

    microcontroladores PIC de 8 bit, por exemplo, o inteiro possui 16 bit .

    Sendo assim, defina tipos claros e util ize-os, como uint8 para inteiros no sinalizados de 8 bit ou int16 para inteiros

    sinalizados de 16 bit.

    Tambm seja atencioso ao declarar ponteiros. Uma declarao como:

    char* s, t, u;

    no est errada, mas provavelmente no o que voc deseja, j que t e u no sero declarados como ponteiros.

    Sendo assim, prefira esta forma para declarar os ponteiros sem margem para erros:

    char *s, *t, *u;

    http://pt.wikipedia.org/wiki/CamelCasehttp://pt.wikipedia.org/wiki/Nota%C3%A7%C3%A3o_H%C3%BAngara
  • 8/11/2019 Programando Em C_ Boas Prticas - Eletronica

    5/6

    3/9/2014 Programando em C: Boas Prticas - Eletronica.org

    http://www3.eletronica.org/artigos/programando-em-c-boas-praticas 5/6

    32Curtir 3 Tweetar 5

    Concluso

    Nossa inteno neste artigo foi abordar algumas tcnicas que podem ajud-lo a melhorar a legibilidade do seu

    cdigo. Apesar de existirem vrios outros pontos que podem ser abordados neste tpico, de uma forma geral,

    escrevendo um cdigo organizado, bonito e bem comentado existe uma grande probabilidade do seu cdigo tornar-

    se bastante legvel, quesito que traduz-se em agilidade e produtividade em todas as fases do ciclo de vida do

    software.

    Roberto Alcntara

    [email protected]

    About the author

    Currently there is no additional info about this author.

    One Response

    Sergio Marcelino on 20/02/2012

    Muito obrigado realmente esta logica que falta, pois muitas vezes outros tero que continuar, corrigir

    ou ampliar o programa e se no for escrito com clareza custar tempo perdido.

    Reply

    Comment on this post

    Name

    Email

    Website

    Submit Comment

    Share 2

    http://www3.eletronica.org/artigos/programando-em-c-boas-praticas?replytocom=66#respondhttp://twitter.com/search?q=http%3A%2F%2Fwww3.eletronica.org%2Fartigos%2Fprogramando-em-c-boas-praticashttps://twitter.com/intent/tweet?original_referer=http%3A%2F%2Fwww3.eletronica.org%2Fartigos%2Fprogramando-em-c-boas-praticas&related=Administrador%20Eletronica.org%3AThe%20author%20of%20this%20post&text=Programando%20em%20C%3A%20Boas%20Pr%C3%A1ticas&tw_p=tweetbutton&url=http%3A%2F%2Fwww3.eletronica.org%2Fartigos%2Fprogramando-em-c-boas-praticas&via=eletronica_orgmailto:?subject=Programando%20em%20C:%20Boas%20Pr%C3%A1ticas&body=Programando%20em%20C:%20Boas%20Pr%C3%A1ticas%20-%20http://www3.eletronica.org/artigos/programando-em-c-boas-praticas
  • 8/11/2019 Programando Em C_ Boas Prticas - Eletronica

    6/6

    3/9/2014 Programando em C: Boas Prticas - Eletronica.org

    http://www3.eletronica.org/artigos/programando-em-c-boas-praticas 6/6

    8 = cinco

    Tags

    can capacitor equipamento fusvel fuzzy

    indutor interrupo layout linux

    microcontrolador pci porta paralela pwm

    resistor robtica rs232 serial

    sistemas embarcados solda tempo-real

    Tpicos Recentes no Frum

    programao ladder para microcontrolador pic

    Ajuda para entendimento e montagem de um

    conversor CC-CC

    Dvidas Eletrnicas

    Equipamento que detecta amassados

    CODIGO RFID

    Ajuda com circuito

    Exercicio de Eletronica 2

    Posts Recentes

    Simulao baseada em software livre de um

    sistema robtico fuzzy

    Desacoplando Atravs de Exemplos

    Estao de Solda Hakko FX 951

    Programming Embedded Systems, Second Edition

    Designing Embedded Hardware 2nd Edition

    Math Toolkit for Real-Time Programming

    Building Embedded Systems Devices

    Copyleft 2002-2012 - Eletronica.org

    http://www3.eletronica.org/reviews/building-embedded-systems-deviceshttp://www3.eletronica.org/reviews/math-toolkit-for-real-time-programminghttp://www3.eletronica.org/reviews/designing-embedded-hardware-2nd-editionhttp://www3.eletronica.org/reviews/programming-embedded-systems-second-editionhttp://www3.eletronica.org/reviews/estacao-de-solda-hakko-fx-951http://www3.eletronica.org/artigos/desacoplando-atraves-de-exemploshttp://www3.eletronica.org/artigos/simulacao-baseada-em-software-livre-de-um-sistema-robotico-fuzzyhttp://www3.eletronica.org/forums/topic/exercicio-de-eletronica-2http://www3.eletronica.org/forums/topic/ajuda-com-circuitohttp://www3.eletronica.org/forums/topic/codigo-rfidhttp://www3.eletronica.org/forums/topic/equipamento-que-detecta-amassadoshttp://www3.eletronica.org/forums/topic/duvidas-eletronicashttp://www3.eletronica.org/forums/topic/ajuda-para-entendimento-e-montagem-de-um-conversor-cc-cchttp://www3.eletronica.org/forums/topic/programacao-ladder-para-microcontrolador-pichttp://www3.eletronica.org/tag/tempo-realhttp://www3.eletronica.org/tag/soldahttp://www3.eletronica.org/tag/sistemas-embarcadoshttp://www3.eletronica.org/tag/serialhttp://www3.eletronica.org/tag/rs232http://www3.eletronica.org/tag/roboticahttp://www3.eletronica.org/tag/resistorhttp://www3.eletronica.org/tag/pwmhttp://www3.eletronica.org/tag/porta-paralelahttp://www3.eletronica.org/tag/pcihttp://www3.eletronica.org/tag/microcontroladorhttp://www3.eletronica.org/tag/linuxhttp://www3.eletronica.org/tag/layouthttp://www3.eletronica.org/tag/interrupcaohttp://www3.eletronica.org/tag/indutorhttp://www3.eletronica.org/tag/fuzzyhttp://www3.eletronica.org/tag/fusivelhttp://www3.eletronica.org/tag/equipamentohttp://www3.eletronica.org/tag/capacitorhttp://www3.eletronica.org/tag/can