quarta-feira, 4 de março de 2009

Hello World multi-idiomas com alocação dinâmica de memória e ponteiros

Olá pessoal!

Já vimos como desenvolver, sabemos o que precisamos tanto em Linux quanto em Windows para escrever/rodar nossos programas. É claro que se trata do modo mais básico, depois acabamos ajustando para aquilo que estamos desenvolvendo especificamente.

Bom, no post anterior você viu como fazer um "hello world" em C e também em C++. Agora o código é C, e a partir dele iniciaremos postagens referentes a alguns assuntos chaves nessa linguagem:

- Trabalhar com vetores e matrizes (bidimensionais e multidimensionais);

- Trabalhar com alocação dinâmica de memória;

- Trabalhar com strings.

Sem mais delongas confira o código:

/*
Author: Helton Eduardo Ritter
Date:2009-03-04

This program dinamic alloc memory to print "hello world" message
*/

#include // necessary to printf
#include // necessary to malloc
#include // necessary to time

int main()
{
char **texts; // this is a pointer
int i,j,k;

// dinamic allocate memory to = 4 languages, 20 space string
for(i=0;i<4;i++)
texts[i] = malloc(20 * sizeof(char));

// set texts
texts[0] = "Hello world!"; // english
texts[1] = "Hallo Velt!"; // german
texts[2] = "Ola mundo!"; // portuguese
texts[3] = "Holla mundo!"; // Spanisch

// clear values
srand(time(NULL));
k = rand() % 4;

// print the random gretings
printf("%s",texts[k]);

// the declaration of main function say that this function "retun int value"
return 0;

}


Vamos as considerações que podem parecer básicas, mas que refrescam a mente de quem está já a algum tempo sem programar em C.

- No início do arquivo principal, você deve incluir as bibliotecas das quais durante o código você vai usar funções. A biblioteca que normalmente está presente em todos os projetos é a "stdio.h" (standard I/O - input/output), ou seja sempre que precisar dar entrada ou saída em alguma informação, precisará incluir essa biblioteca.

- Os delimitadores de comentários em C são os mesmos em muitas outras linguagens de programação. /* comentário aqui de multiplas linhas */ e também tem o // comentário de uma linha.

- O main (embora seja o bloco principal) também é uma função e deve retornar um tipo de dados tal qual foi declarado, por isso daquele return antes de fechar o bloco do main (apenas evitar warning no compilador);

- Na alocação de memória, o malloc retorna void, você deve passar como parâmetro para ele quanto de memória alocar, mas esse tamanho (bytes) dependem da arquitetura da maquina, logo um int em um processador 32 bits tem um tamanho diferente de um int em um processador 64, por isso que sempre fazermos o cálculo em cima de um tipo de dados e não passamos valores fixos;

- O random no C não funciona muito bem se antes você não "limpar" ou mandar "zerar", se esquecer ele sorteará com muita frequencia o mesmo valor;

- Por último e não menos importante temos o "%s" que é a "mascara" do printf que formata o valor passado a partir do segundo parâmetro nesta função. O "%s" no caso diz que o printf deverá formatar o valor como uma string.

Temos neste artigo vários tópicos abordados por alto, bem superficialmente. Em outro momento entraremos em detalhes de cada um.

Até mais!

Um comentário:

  1. Muito bom pra refrescar a memória, eu que estava um bom tempinho sem programar em C achei bem interessante relembrar dos ponteiros para ponteiros.

    Flws

    ResponderExcluir