<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>C on Peczenyj's Blog</title><link>http://pacman.blog.br/categories/c/</link><description>Recent content in C on Peczenyj's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 06 Aug 2008 15:05:00 -0300</lastBuildDate><atom:link href="http://pacman.blog.br/categories/c/atom.xml" rel="self" type="application/rss+xml"/><item><title>Algumas pessoas PRECISAM fazer programas interativos</title><link>http://pacman.blog.br/blog/2008/08/06/algumas-pessoas-precisam-fazer/</link><pubDate>Wed, 06 Aug 2008 15:05:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2008/08/06/algumas-pessoas-precisam-fazer/</guid><description>&lt;div class='post'>
Este código:&lt;br />&lt;pre>&lt;code>#include &amp;lt;stdio.h&amp;gt;&lt;br />#include &amp;lt;stdlib.h&amp;gt;&lt;br />&lt;br />int main(int argc, char **argv){&lt;br /> int i;&lt;br /> double total =0;&lt;br />&lt;br /> for(i=1;i &amp;lt; argc;i++){&lt;br /> total = total + atof(argv[i]);&lt;br /> }&lt;br />&lt;br /> printf("A soma dos %d parametros eh %f\n",(argc - 1),total);&lt;br />&lt;br /> return 0;&lt;br />}&lt;/code>&lt;/pre>&lt;br />&lt;br />É limpo, prático e scriptável. Não preciso fazer pergunta nenhuma nem tratar nada que o usuario informe: no maximo posso ver o número de parâmetros e reclamar. Basta saber como funciona o laço for e saber que argc é o número de parâmetros que eu passei para o programa e argv é um vetor de strings (que, em C puro, são vetores de chars) onde cada elemento é um parâmetro. O primeiro é sempre o nome do programa (a posição 0, que eu pulei).&lt;br />&lt;br />&lt;pre>$ gcc -Wall soma.c&lt;br />$ ./a.out 1 2 3 4 5&lt;br />A soma dos 5 parametros eh 15.000000&lt;/pre>&lt;br />&lt;br />Eu compilo e pelo para que todos os warnings possiveis sejam mostrados. Novamente não tive nenhum problema e o código funciona bem. Nem um flush de stdin foi preciso. Se eu colocar uma palavra no meio, como abóbora, será ignorado.&lt;br />&lt;br />Não é mais facil assim do que fazer milhões de menus? Nem precisa de system("pause") system("cls")!&lt;/div>
&lt;h2>Comments&lt;/h2>
&lt;div class='comments'>
&lt;div class='comment'>
&lt;div class='author'>NetWalker&lt;/div>
&lt;div class='content'>
hmmm...&lt;BR/>in.ignore(std::numeric_limits&lt;BR/>&amp;lt;std::streamsize&amp;gt;::max(),&amp;#39;\n&amp;#39;);&lt;BR/>in.get();&lt;BR/>??&lt;BR/>heheheh :D&lt;BR/>i agree&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Tiago Peczenyj&lt;/div>
&lt;div class='content'>
Que fique registrado: system("pause") é um convite a &lt;B>morte&lt;/B>.&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Programando em C para console - parte 1</title><link>http://pacman.blog.br/blog/2008/04/02/programando-em-c-para-cons/</link><pubDate>Wed, 02 Apr 2008 14:10:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2008/04/02/programando-em-c-para-cons/</guid><description>&lt;div class='post'>
(Depois de um fecundo primeiro de Abril... )&lt;br />&lt;br />Cada vez mais eu me espanto com a quantidade de novatos que tentam fazer programas para o "modo console" que não fazem o menor sentido.&lt;br />&lt;br />Programas com menuzinho (1 - saque , 2 - deposito, 3 - sair) ou do estilo "digite um numero (q para sair)" são totalmente contra-produtivos. O novato perde TEMPO fazendo um monte de código desnecessário quando esquece o que deveria fazer (o tal do &lt;span style="font-style:italic;">algoritmo&lt;/span>).&lt;br />&lt;br />Veja um exemplo: um programa que receba uma quantidade variavel de números e que imprima a soma dos mesmos. IMHO a forma mais interessante para fazer isso é pegar os números como argumentos do programa principal. Vc cria um programa console absolutamente limpo e facil de scriptar, por exemplo.&lt;br />&lt;br />Veja só:&lt;br />&lt;br />&lt;pre>&lt;code>#include &amp;lt;stdio.h&amp;gt;&lt;br />&lt;br />int main(int argc, char *argv[]){&lt;br /> double soma = 0.0;&lt;br />&lt;br /> printf("A soma dos numeros eh %g\n",soma);&lt;br />&lt;br /> return 0;&lt;br />}&lt;/code>&lt;/pre>&lt;br />&lt;br />Feito esse simples arquivo, vamos compilar&lt;br />&lt;pre>$ gcc -Wall soma.c&lt;br />$ ./a.out 1 2 3 4 5 &lt;br />A soma dos numeros eh 0&lt;/pre>&lt;br />&lt;br />Ai vc fala "po, ta errado!", mas claro, eu primeiro escrevi a base do meu programa. Perceba que eu compilei com a opção -Wall, que me informa todos os &lt;span style="font-style:italic;">warnings&lt;/span> que a compilação pode gerar (o que sempre é uma excelente pratica, eu procuro compilar sempre com 0 warnings).&lt;br />&lt;br />Feito isso, vamos definir 2 coisas:&lt;br /> - O algoritmo da soma e&lt;br /> - Possiveis fluxos de excessão.&lt;br />&lt;br />Vou partir do suposto que, se vc digitar alguma coisa que não seja um numero, eu vou ignorar e considerar como 0. Caso eu não informe nenhum numero ao programa, isso significa que estou faltando com alguma coisa, nesse caso vou informar uma mensagem elucidativa sobre o uso do programa.&lt;br />&lt;br />&lt;pre>&lt;code>#include &amp;lt;stdio.h&amp;gt;&lt;br />#include &amp;lt;stdlib.h&amp;gt;&lt;br />&lt;br />int main(int argc, char *argv[]){&lt;br /> int i;&lt;br /> double soma = 0.0;&lt;br />&lt;br /> if(argc == 1){&lt;br /> fprintf(stderr,"Faltando Argumentos!\n");&lt;br /> fprintf(stderr,"Uso: %s x1 [ x2 .. xN ]\n",argv[0]);&lt;br /> return 1;&lt;br /> }&lt;br />&lt;br /> for(i=1;i&amp;lt;argc;i++) &lt;br /> soma += atof(argv[i]);&lt;br />&lt;br /> printf("A soma dos numeros eh %g\n",soma);&lt;br />&lt;br /> return 0;&lt;br />}&lt;/code>&lt;/pre>&lt;br />&lt;br />Todos os argumentos que eu passo para o programa, incluindo o nome do mesmo, ficam no vetor &lt;span style="font-weight:bold;">argv&lt;/span>, e o número de argumentos fica na variavel &lt;span style="font-weight:bold;">arcc&lt;/span>. Dessa forma, o nome do programa é o argv[0] e, se eu não passar nenhum argumento adicional, argc será 1. A função atof converte a string para um número de ponto flutuante e retorna 0 se não for possivel converter.&lt;br />&lt;br />Simples, não? Agora vamos executar:&lt;br />&lt;br />&lt;pre>$ ./a.out &lt;br />Faltando Argumentos!&lt;br />Uso: ./a.out x1 [ x2 .. xN ]&lt;br />$ echo $?&lt;br />1&lt;br />$ ./a.out 1 2 3 4 5&lt;br />A soma dos numeros eh 15&lt;br />$ echo $?&lt;br />0&lt;/pre>&lt;br />&lt;br />A mensagem de uso utiliza uma notação no manual de alguns programas do mundo unix: colocar os argumentos opcionais entre colchetes. Eu informo que preciso de pelo menos &lt;span style="font-weight:bold;">um&lt;/span> argumento. Caso eu entre no fluxo de excessão, o meu main retorna um valor diferente de 0 para o sistema operacional que pode ser capturado pela variavel de ambiente $? (nesse caso estou em um linux utilizando o bash, em outros sistemas mais exotéricos como o Windows eu não imagino como vc poderia capturar essa informação, tampouco imagino se ela seria util).&lt;br />&lt;br />Perceba que eu posso criar um script extremamente simples para utilizar esse programa, assim como testar o resultado é uma tarefa de um grep (ou diff). Eu poderia juntar um script de teste e um makefile nesse post mas estou esperando um exemplo um pouco mais interessante.&lt;br />&lt;br />Eu criei um programa sucinto, facil de entender e muito util, sem ter que perguntar para o usuario nada. transformar esse programa num que calcula a média, por exemplo, é uma tarefa de colocar apenas uma linha (na verdade uma subtração e uma divisão) a mais. Espero que os programadores novatos se inspirem nessa forma de pensar e que utilizem os programas básicos do unix como o grep, cat, diff, cp, etc, para seus futuros trabalhos.&lt;/div>
&lt;h2>Comments&lt;/h2>
&lt;div class='comments'>
&lt;div class='comment'>
&lt;div class='author'>Felipe&lt;/div>
&lt;div class='content'>
Aguardando....&lt;BR/>&lt;BR/>OFF: As mentiras de ontem forma muito engraçadas, a do Java mesmo :-)&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Tiago Peczenyj&lt;/div>
&lt;div class='content'>
Felipem, o GDB por si só precisaria de um post exclusivo. Tenho que pensar bem no exemplo para que seja util.&lt;BR/>&lt;BR/>Estou pensando num algoritmo de ordenação com algum &lt;I>errinho&lt;/I>, ou algum processo recursivo como calcular fibonacci, etc.&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Felipe&lt;/div>
&lt;div class='content'>
Poucos sabem o que é um UNIX. Programam no DOS usando um while(1) para não fechar a tela do DOS, não sabem nem ir no cmd e digitar o nome do programa, eles clicam no executável.&lt;BR/>&lt;BR/>O C é uma linaguagem que os programadores mais comuns não sabem/se interessam. Ler o TCPL sem entender o que é um wc, grep, sort... é IMHO impossível.&lt;BR/>&lt;BR/>Aguardo os posts sobre getopt e GDB(ah sim GDB não está na lista de "promessas", mas vai ter, vai?)&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Tiago Peczenyj&lt;/div>
&lt;div class='content'>
Duas coisas que esqueci de comentar: &lt;BR/>&lt;BR/>1) As mensagens de erro vão para a saida de erro (stderr)&lt;BR/>&lt;BR/>2) A mensagem "A soma dos numeros eh " é totalmente desnecessária. Inclusive seria mais sucinto se a resposta fosse apenas o valor numérico.&lt;BR/>&lt;BR/>fica para a proxima então: scripts de teste, makefile, getopt (posso querer utilizar uma opção -v [verbose]) e, se der tempo, localização!&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Entendendo Ponteiros na linguagem C</title><link>http://pacman.blog.br/blog/2007/10/24/entendendo-ponteiros-na-linguagem-c/</link><pubDate>Wed, 24 Oct 2007 11:09:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/10/24/entendendo-ponteiros-na-linguagem-c/</guid><description>&lt;div class='post'>
Entender ponteiros (e ponteiros para ponteiros) nem sempre é facil quando estamos vendo C ou C++ pela primeira vez. O conceito é absurdamente simples, assim como os operadores * e &amp;, mas pelo menos para mim demorou um tempão para a ficha cair (e olha que eu utilizava arrays direto e nem me ligava nesse detalhe).&lt;br />&lt;br />Com auxilio do pre-processador C, vejamos se este exemplo que pode ser elucidativo:&lt;br />&lt;br />&lt;pre>&lt;code>#include "pointer.h" &lt;br />int main () &lt;br />{ &lt;br /> int x = 0; // variavel de exemplo &lt;br /> pointer(int) y; // ponteiro &lt;br />&lt;br /> y = address(x); // y aponta para o endereco de x &lt;br />&lt;br /> x++; // incrementamos o valor de x &lt;br /> value(y)++; // incremento indireto (via ponteiro) &lt;br />&lt;br /> printf("value %d %d\n",x, value(y) ); &lt;br /> printf("address %p %p\n",address(x), y ); &lt;br />&lt;br /> return 0; &lt;br />} &lt;/code>&lt;/pre>&lt;br />&lt;br />Ou seja, a criação de um ponteiro para uma variavel do tipo inteira é através da macro pointer. Outra macro, address, retorna o endereço de uma variavel e, assim, tenho uma referência aquela variavel. Posso então ter acesso ao valor e até mesmo manipular a variavel original.&lt;br />&lt;br />Vejamos agora o resultado da execução:&lt;br />&lt;pre>$ ./a.out&lt;br />value 2 2&lt;br />address 0xbfffeaa4 0xbfffeaa4&lt;/pre>&lt;br />&lt;br />Perceba que eu consegui incrementar a variavel duas vezes (através das duas formas disponíveis). Perceba também que o ponteiro y tem como valor o mesmo endereço de memória que a variavel x, razão pela qual consigo alterar o seu valor.&lt;br />&lt;br />O codigo gerado pelas macros &lt;br />&lt;br />&lt;pre>&lt;code>int main () &lt;br />{ &lt;br /> int x = 0; // variavel de exemplo &lt;br /> int * y; // ponteiro &lt;br />&lt;br /> y = (&amp;(x)); // y aponta para o endereco de x &lt;br />&lt;br /> x++; // incrementamos o valor de x &lt;br /> (*y)++; // incremento indireto (via ponteiro) &lt;br />&lt;br /> printf("value %d %d\n",x, (*y)); &lt;br /> printf("address %p %p\n",(&amp;(x)), y); &lt;br />&lt;br /> return 0; &lt;br />} &lt;/code>&lt;/pre>&lt;br />&lt;br />Eu recomendo que, uma vez que o conceito tenha ficado claro, &lt;span style="font-weight:bold;">que não se use mais este header&lt;/span> sob pena de criar arquivos ilegíveis. Por exemplo, tente compilar com a opção de gerar os simbolos para debug (-g) e depois tente debugar esse programa: perceberão que o gdb, por exemplo, não mostra o codigo fonte com tanta clareza.&lt;br />&lt;br />Para fazer este exemplo, utilizamos este arquivo header:&lt;br />&lt;br />&lt;pre>&lt;code>#define pointer(type) type *&lt;br />#define value(var) (*(var))&lt;br />#define address(var) (&amp;(var))&lt;/code>&lt;/pre>&lt;/div>
&lt;h2>Comments&lt;/h2>
&lt;div class='comments'>
&lt;div class='comment'>
&lt;div class='author'>Tiago Peczenyj&lt;/div>
&lt;div class='content'>
Magoei... :(&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Ron&lt;/div>
&lt;div class='content'>
lixo! vai aprender a programar! :D&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Introdução aos Device Drivers no Linux</title><link>http://pacman.blog.br/blog/2007/07/12/introduo-aos-device-drivers-no-linux/</link><pubDate>Thu, 12 Jul 2007 17:17:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/07/12/introduo-aos-device-drivers-no-linux/</guid><description>&lt;div class='post'>
Vamos fazer um /dev/hello_word ?&lt;br />&lt;br />Aprenda a fazer um neste &lt;a href="http://www.linuxdevcenter.com/pub/a/linux/2007/07/05/devhelloworld-a-simple-introduction-to-device-drivers-under-linux.html">fascinante artigo&lt;/a> -- nunca se sabe quando será util!&lt;/div></description></item><item><title>Printf Format Specifications Quick Reference</title><link>http://pacman.blog.br/blog/2007/07/12/printf-format-specifications-quick/</link><pubDate>Thu, 12 Jul 2007 15:38:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/07/12/printf-format-specifications-quick/</guid><description>&lt;div class='post'>
Tudo o que vc sempre quis saber sobre o printf mas tinha medo de perguntar:&lt;br />&lt;a href="http://www.pixelbeat.org/programming/format_specs.html">http://www.pixelbeat.org/programming/format_specs.html&lt;/a>&lt;/div></description></item><item><title>Sugestões de Leitura</title><link>http://pacman.blog.br/blog/2007/07/11/sugestes-de-leitura/</link><pubDate>Wed, 11 Jul 2007 15:38:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/07/11/sugestes-de-leitura/</guid><description>&lt;div class='post'>
Ja ouviu falar na tal Web 2.0? Veja os &lt;a href="http://www.slideshare.net/pcalcado/somos-nozes">slides&lt;/a> da apresentação do Philip Calçado.&lt;br />&lt;br />Quer dominar o Vi/Vim? Veja este pequeno &lt;a href="http://wiki.if.uff.br/operador/doku.php/dicas:vi">guia&lt;/a>.&lt;br />&lt;br />Se inglês não é problema, vc pode aprender &lt;a href="http://www.planetpdf.com/developer/article.asp?ContentID=6632">Java&lt;/a>, &lt;a href="http://www.planetpdf.com/developer/article.asp?ContentID=6634">C++&lt;/a> ou &lt;a href="http://www.advancedlinuxprogramming.com/">Programação Avançada em Linux&lt;/a> usando livros gratuitos e de ótima qualidade.&lt;br />&lt;br />No site da InfoQ vc ainda pode baixar livros de &lt;a href="http://www.infoq.com/minibooks/enterprise-soa">SOA&lt;/a>, &lt;a href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches">Scrum &amp; XP&lt;/a>, &lt;a href="http://www.infoq.com/minibooks/domain-driven-design-quickly">Domain Driven&lt;/a> e &lt;a href="http://www.infoq.com/minibooks/vsnettt">Dicas de Visual Studio .NET&lt;/a>.&lt;br />&lt;br />E, se vc se interessa por Gerência de Projetos, vai gostar &lt;a href="http://www.leanconstruction.org/pdf/ObsoleteTheory.pdf">desse artigo&lt;/a>.&lt;br />&lt;br />Boa leitura!&lt;/div></description></item><item><title>Ansi C orientado à objetos</title><link>http://pacman.blog.br/blog/2007/07/10/ansi-c-orientado-objetos/</link><pubDate>Tue, 10 Jul 2007 16:37:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/07/10/ansi-c-orientado-objetos/</guid><description>&lt;div class='post'>
Divertido! Compila e não gera nenhum warning.&lt;br />&lt;br />&lt;pre>&lt;code>&lt;br />#include &amp;lt;stdio.h&amp;gt;&lt;br />&lt;br />struct {&lt;br /> struct {&lt;br /> int (*println) (const char *);&lt;br /> } out;&lt;br />} System = { {puts} };&lt;br />&lt;br />&lt;br />int main (void){&lt;br />&lt;br /> System.out.println("ola mundo");&lt;br />&lt;br /> return 0;&lt;br />}&lt;/pre>&lt;/code>&lt;br />&lt;br />Achei um pdf no google sobre o assunto chamado &lt;a href="http://www.planetpdf.com/codecuts/pdfs/ooc.pdf">Orientação A Objetos em C Ansi&lt;/a>. Neste caso, eu criei um ponteiro para a função puts (presente na libc), chamado println. Criei uma variavel chamada &lt;span style="font-style:italic;">System&lt;/span>, que é uma estrutura que possui uma variavel chamada &lt;span style="font-style:italic;">out &lt;/span>que, por sua vez, possui o ponteiro &lt;span style="font-style:italic;">println&lt;/span>.&lt;/div>
&lt;h2>Comments&lt;/h2>
&lt;div class='comments'>
&lt;div class='comment'>
&lt;div class='author'>Tiago Peczenyj&lt;/div>
&lt;div class='content'>
Ola!&lt;BR/>Esqueci mesmo, achei o pdf e postei na correria. :)&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>J. F. Mitre&lt;/div>
&lt;div class='content'>
Amigo, &lt;BR/>tenho acompanhado seu textos a algum tempo, são de alta qualidade, mesmo quando são curtos. Muito bom.&lt;BR/>&lt;BR/>Mas quando você escreveu esse texto e colocou esse link no fim da página, você esqueceu de mencionar que era um &lt;B>livro gratuito de mais de 200 páginas...&lt;/B>&lt;BR/>&lt;BR/>&lt;A HREF="http://www.planetpdf.com/developer/article.asp?ContentID=object_orientated_programming_&amp;gid=6635" REL="nofollow">Link para a página de divulgação do livro&lt;/A>. Bom para saber quando e quem escreveu.&lt;BR/>&lt;BR/>Eu só posso dizer obrigado !&lt;BR/>&lt;BR/>1[]'s&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>O melhor de dois mundos: C e Fortran</title><link>http://pacman.blog.br/blog/2007/07/02/o-melhor-de-dois-mundos-c-e-fortran/</link><pubDate>Mon, 02 Jul 2007 11:48:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/07/02/o-melhor-de-dois-mundos-c-e-fortran/</guid><description>&lt;div class='post'>
C é uma ótima linguagem de programação, simples e clara.&lt;br />Fortran, para problemas matemáticos, é imbativel!&lt;br />&lt;br />Que tal usar o melhor dos dois mundos com este &lt;a href="http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html">tutorial&lt;/a>?&lt;br />&lt;br />Vejamos o exemplo abaixo:&lt;br />&lt;br />Arquivo testC.cpp&lt;br />&lt;pre>&lt;code>#include &lt;iostream>&lt;br />&lt;br />using namespace std;&lt;br />&lt;br />extern"C" {&lt;br />void fortfunc_(int *ii, float *ff);&lt;br />}&lt;br />&lt;br />main()&lt;br />{&lt;br />&lt;br /> int ii=5;&lt;br /> float ff=5.5;&lt;br />&lt;br /> fortfunc_(&amp;ii, &amp;ff);&lt;br />&lt;br /> return 0;&lt;br />}&lt;/code>&lt;/pre>&lt;br />&lt;br />Arquivo testF.f&lt;br />&lt;pre>&lt;code> subroutine fortfunc(ii,ff)&lt;br /> integer ii&lt;br /> real*4 ff&lt;br />&lt;br /> write(6,100) ii, ff&lt;br /> 100 format('ii=',i2,' ff=',f6.3)&lt;br />&lt;br /> return&lt;br /> end&lt;/code>&lt;/pre>&lt;br />&lt;br />Compilando&lt;br />&lt;br />&lt;pre>$ f77 -c testF.f&lt;br />$ g++ -c testC.cpp&lt;br />$ g++ -o test testF.o testC.o -lg2c&lt;/pre>&lt;br />&lt;br />Executando&lt;br />&lt;br />&lt;pre>$ ./test&lt;br />ii= 5 ff= 5.500&lt;/pre>&lt;br />&lt;br />Aceito sugestões, agora que não tenho muita coisa para fazer em Fortran.&lt;/div></description></item><item><title>O Desenvolvimento da Linguagem C</title><link>http://pacman.blog.br/blog/2007/06/18/o-desenvolvimento-da-linguagem-c/</link><pubDate>Mon, 18 Jun 2007 16:30:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/06/18/o-desenvolvimento-da-linguagem-c/</guid><description>&lt;div class='post'>
Um texto cativante e histórico (por Dennis M. Ritchie): &lt;br />&lt;br />&lt;a href="http://cm.bell-labs.com/cm/cs/who/dmr/chistPT.html">http://cm.bell-labs.com/cm/cs/who/dmr/chistPT.html&lt;/a>&lt;br />&lt;br />a Linguagem C e o Sistema Operacional Unix foram revolucionários, trazendo conceitos usados até hoje. Qualquer um que queira se aventurar no mundo da informática, seja como hobbie ou profissão, tem que conhece-los ao menos um pouco.&lt;/div></description></item><item><title>Ola Mundo!</title><link>http://pacman.blog.br/blog/2007/06/11/ola-mundo/</link><pubDate>Mon, 11 Jun 2007 16:42:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/06/11/ola-mundo/</guid><description>&lt;div class='post'>
Quando aprendemos uma nova linguagem de programação, normalmente o primeiro exemplo é o famoso "Hello World!", ou seja, um pequeno código que imprime uma mensagem na tela do computador.&lt;br />&lt;br />Em C, ele seria assim:&lt;br />&lt;br />&lt;pre>&lt;code>/* Um comentário */&lt;br />#include &amp;lt;stdio.h&amp;gt;&lt;br />&lt;br />int main ()&lt;br />{&lt;br /> puts ("Hello world!");&lt;br /> return 0;&lt;br />}&lt;/code>&lt;/pre>&lt;br />&lt;br />As vezes o &lt;span style="font-weight:bold;">puts&lt;/span> é substituido pelo multifacetado &lt;span style="font-weight:bold;">printf&lt;/span> no exemplo, mas o efeito é o mesmo. Vejamos como seria em Java.&lt;br />&lt;br />&lt;pre>&lt;code>/* Comentarios, igual ao C */&lt;br />package Hello;&lt;br />&lt;br />public class HelloWorld {&lt;br /> public static void main(String[] args) {&lt;br /> System.out.println("Hello world");&lt;br /> }&lt;br /> }&lt;/code>&lt;/pre>&lt;br />&lt;br />As diferenças são várias, apesar da estrutura ser semelhante. Em C nós temos funções parametrizadas, enquanto em Java nós temos objetos (System.out) e métodos (println). &lt;br />&lt;br />Por fim, vamos ver um exemplo em Shell Script&lt;br />&lt;br />&lt;pre>&lt;code>#!/bin/bash&lt;br /># comentario&lt;br />echo "Hello World!"&lt;/code>&lt;/pre>&lt;br />&lt;br />Diferente de uma linguagem de programação, aqui o interpretador de comandos (normalmente) chama um programa capaz de escrever mensagens para o usuario. Ou seja, alguem ja escreveu um "Hello World!" genérico o suficiente para nós. &lt;br />&lt;br />Cada linguagem possui um propósito. Enquanto vc projeta sistemas operacionais e drivers em C, Java ocupa uma área no desenvolvimento de grandes sistemas corporativos enquanto o shell está presente na administração de determinadas tarefas de um servidor (normalmente rodando algum sabor de *nix). &lt;br />&lt;br />Não basta comparar um hello world, pois é preciso ver muito além da sintaxe e recursos da linguagem, mas normalmente se começa por ele.&lt;br />&lt;br />Outros exemplos podem ser encontrados &lt;a href="http://www.roesler-ac.de/wolfram/hello.htm">aqui&lt;/a>.&lt;br />&lt;br />Abraços&lt;/div></description></item></channel></rss>