8 Aug
Ultimamente tenho ouvido falar muito sobre desenvolvimento orientado a testes (Test Driven Development). Uma grande vantagem dessa forma de produzir código é que você consegue garantir a consistência do seu sistema. Quando possuímos bons casos de teste, caso um bug seja inserido durante o desenvolvimento, identificamos o problema assim que rodarmos os casos de teste. Ou seja, trocamos dezenas de horas de debug por alguns segundos (ou talvez minutos) de testes rodando. Assim você acaba produzindo software em um tempo muito menor e provavelmente a qualidade do seu sistema será melhor também.
Infelizmente não encontrei nenhum framework que facilite este tipo de desenvolvimento em C, mas é simples produzir um script (em bash, perl, ruby, etc) que rode seus casos de teste sempre que você quiser. O grande segredo é deixar tudo automatizado (rodar os testes, checar as respostas e avisar onde um possível erro está ocorrendo), assim você não fica cansado de ficar compilando seus testes manualmente para ver se o sistema funciona.
Algumas dicas para quem pretende desenvolver utilizando testes:
Mais informações: Wikipedia
Com isso encerro a série Dia C. Espero que tenham gostado.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
30 Jul
Em C, uma variável pode ser visto de forma semelhante a que é vista em matemática. Ela é um lugar para você colocar valores. A diferença é que é um conceito mais restrito. Cada variável possui um tipo e apenas valores desse tipo podem ser colocados dentro da variável. A variável também possui limitações. Por exemplo, você não pode colocar um número real dentro de uma variável inteira. Se você fizer isso, o compilador poderá gerar um aviso, erro ou fará algum malabarismo para conseguir colocar dentro da variável. No caso, ele pegará apenas a arte inteira do número real.
Além disso, as variáveis possuem um valor máximo e mínimo que pode ser colocado dentro delas. Qualquer valor entre esses dois extremos (inclusive) pode ser atribuído (colocado) a variável. Um valor fora desse limites geralmente irá produzir resultados estranhos, como uma multiplicação entre dois números positivos gerando um número negativo.
C possui diversos tipos de variável que já vem definidos e que você pode usar para compor outros. Esses são os tipos primitivos.
Aqui vai uma tabela com os principais tipos primitivos e seus valores máximos e mínimos:
| Tipo | Equivalente | Valor Máximo | Valor Mínimo | Número de bytes em geral(processador de 32 bits) |
| char | Armazena o código de um caractere | 127 | -128 | 1 |
| int | Armazena um inteiro | 2147483647 | -2147483648 | 4 |
| long | Armazena um inteiro | 2147483647 | -2147483648 | 4 |
| float | Número real com precisão simples | ??? | ??? | 4 |
| double | Número real com dupla precisão | ??? | ??? | 8 |
Além dos tipos primitivos, existem modificadores para o tamanho desses tipos:
| Modificador | Efeito |
| short | Reduz pela metade o número de bytes do tipo primitivo |
| long | Dobra o número de bytes do tipo primitivo |
| unsigned | Define que o tipo apenas representará valores positivos |
| signed | Define que o tipo representará valores positivos e negativos |
Em C, para se utilizar uma variável, é necessário declará-la antes. Para isso, você deve também indicar de qual tipo que ela seja. A sintaxe é basicamente:
tipo nome_da_variavel;
Alguns exemplos:
int i;
long long inteiro_bem_longo;
float pontoFlutuante;
double pontoFlutuante2;
long double CaSeSeNsItIvE;
short int podemosUsarVariosCaracteresNoNomeDaVariavel;
Em C, nomes (de qualquer coisa) podem possuir muitos caracteres (não pude encontrar um valor máximo, mas meus testes mostraram que até 10765 caracteres funciona), desde que não sejam começados por números (podem possuir números a partir do segundo caractere, mesmo que seja entre caracteres) ou operadores. Também não é permitido dar nomes iguais, mesmo que seja para coisas diferentes.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
25 Jul
Agora que você já instalou seu compilador, editor de texto favorito e depurador, nada como algumas dicas de como usá-los.
Para compilar um programa, abra um terminal (Linux: [xgk]term, rxvt, etc…; MacOS X: Terminal, DashBoard Shell, etc…; Windows: cygwin). No terminal digite a seguinte linha:
gcc -Wall -pedantic -std=c99 -g seu_arquivo.c -o arquivo_de_saida
Lembre de trocar seu_arquivo.c pelo arquivo que você quer compilar e arquivo_de_saida pelo nome que você quer dar para o seu executável.
A flag Wall serve para que o compilador gere o maior número possível de avisos de coisas que podem estar erradas no seu programa. Std=c99 é para ele compilar usando ISO C 99 como padrão e pedantic é para ele forçar o padrão de compilação (se não usar, ele pode deixar passar algum código que não seja ISO C 99). G é para que ele gere marcações para o depurador, facilitando o processo de depuração mais tarde.
Em Linux, Windows e MacOS X, digite:
./nome_do_seu_programa
Para rodar o GDB, digite:
gdb nome_do_seu_programa
O GDB possui diversos comandos internos:
Existem vários outros mas esses devem ser os mais usados.
O Vim possui vários modos de utilização. Vamos nos focar no modo de comando (padrão) e de inserção. No modo de comando não aparece nada escrito no canto inferior esquerdo da tela (a não ser mensagens de erro em vermelho. Você vai notar.) Neste modo é possível salvar seu arquivo, abrir um novo, fechar o Vim, etc.
Aqui vão alguns dos comandos mais usados:
Os últimos 6 comandos podem ser colocados em um arquivo especial chamado .vimrc (_vimrc no Vim para Windows e .vimrc no cygwin). Esse arquivo possui comandos que serão executados sempre que você abrir o Vim/GVim. Assim não é necessário digitá-los toda vez que for programar. Este arquivo costuma se localizar na sua home.
O modo de inserção serve para você modificar o texto do arquivo. Para voltar para o modo de comando aperte Esc.
Já o emacs possui apenas um modo e uso. Inserção. Isso significa que você não precisa fazer nada antes de começar a digitar seu programa. Aqui vão alguns comandos úteis (embora você possa fazer tudo com o menu):
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
19 Jul
Este é o primeiro post de uma série que tem por objetivo ensinar programação em C a alguém que já tem noção do que é programação, mas nunca programou. Programadores menos experientes também encontrarão muito material útil aqui.
Esta série está dividida em três partes:
A primeira parte, irá mostrar rapidamente como instalar o compilador GCC, os editores de texto GVim e Emacs e o depurador GDB.
A segunda parte tratará de como a sintaxe de C é estruturada e das palavras reservadas a linguagem. Introduzirá o conceito de variáveis, a estrutura de controle de fluxo de um programa, operações com os temidos ponteiros (que são bem mais simples de usar do que as pessoas costumam pensar), manipulação de bits, funções e preprocessamento.
A terceira parte vai funcionar como um guia de referência para as funções dos padrões ANSI e ISO C 99. Assim você poderá saber qual suporte C oferece para seus programadores.
O GCC é um dos melhores compiladores da linguagem C que existe. Boa parte do que foi adicionado ao padrão ISO C 99 eram extensões apenas do GCC. Além disso ele é OpenSource. Nos exemplos vou usar o GCC, mas qualquer compilador ISO C 99 deve compilar os exemplos.
Instalar o GCC em Linux é bem simples. Provavelmente você já possui ele instalado (sei apenas de uma versão do Ubuntu que não vinha com o GCC por padrão). Para checar, abra um terminal e digite ‘gcc –version’. Ele irá informar qual a versão do compilador. Se a shell devolver alguma mensagem de erro, instale o GCC com o seu gerenciador de pacotes (como são muitos, não vou entrar em detalhes).
Em MacOS X, você deverá se cadastrar na Apple Developer Connection (ADC) e baixar o pacote xCode. O xCode vai instalar dezenas de programas, bibliotecas e frameworks em seu computador. Possui muita coisa realmente útil e muita coisa inútil. Ainda bem que você pode escolher o que instalar.
Em Windows, a melhor opção é instalar o cygwin, que é um emulador de Linux para Windows. Muito bom.
O depurador que uso é o GDB (GNU Debugger). Excelente depurador, poderá ajudar muito a detectar algum erro em seus programas.
Em Linux ele já deve estar instalado, caso contrário siga o mesmo procedimento feito para o GCC.
Em MacOS X, o xCode já instala o GDB.
Em Windows, o cygwin também já traz o GDB.
Em Linux e MacOS X, o vim vem instalado por padrão. Para instalar o Gvim use seu gerenciador de pacotes preferido ou acesse o site do Vim e faça o download.
Para instalar em Windows, acesse o site do Vim e pegue o instalador.
Além do Vim, existe um outro bom editor chamado Emacs, criado por Richard Stallman.
Para instalar o Emacs no Linux basta usar o seu gerenciador de pacotes (Portage, Synaptic, etc…) e escolher a opção de instalar o Emacs. Caso sua distribuição não tenha um gerenciador de pacotes, entre no site do Emacs e faça o download.
Para instalar no Windows, acesse o site do Emacs e pegue o pacote de arquivos pré-compilados. Ele não contém um instalador, mas basta extraí-lo (ele é um .zip) e executar o bin/runemacs.exe, você pode deixar a pasta em qualquer lugar mas é interessante deixar em um lugar fácil de lembrar (C:\ ou Arquivos de Programas).
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.