Tutorial C – Parte 1 – Introdução

O que é um programa de computador? Antes de aprendermos a programar em uma linguagem que não seja algum tipo de script (.php, .bat ou shell script por exemplo), vamos discutir o que um programa de computador realmente faz. Em uma frase, um programa de computador é:

“Uma seqüência de instruções binárias para o processados executar e enviar resultado para o Kernel do Sistema Operacional, que irá então tratar o resultado como deve.”

Se você está no ramo da informática a um tempo, sem dúvida já ouviu falar em Kernel, ou nas infames BSOD (Blue Screen Of Death) do Windows, ou no Linux, ou Mac, enfim, o que raios é o Kernel? O Kernel é literalmente o núcleo do Sistema Operacional, sem ele, nada funciona, é ele que permite que as coisas sejam mostradas na tela por exemplo, ou um input do teclado seja aceito e lido corretamente. Voltemos à nossa frase, um programa binário, é uma seqüência de instruções que o processador irá executar, certo, e o que o processador entende? Quem falar código binário, acertou. Fiquem tranqüilos, eu não vou explicar Assembly ou até mesmo como escovar bits ou programar diretamente em hexadecimal, isso foi apenas para explicar a diferença entre um programa binário e um script, podemos resumir nessa forma:

  • Programas em script podem ser modificados normalmente, apenas com um editor de texto

  • Programas em script podem ocorrer problemas em tempo de execução, problemas de sintaxe de programação

  • Programas em script não são exatamente programas, mas sim instruções (quase sempre) seqüenciais para um outro programa

  • Programas em script são mais portáveis.

  • Programas binários protegem seu programa de quase 100% das modificações feitas por usuários mal intencionados, salvo em casos de falhas de segurança na programação.

  • Programas binários, uma vez compilados, estão 100% livres de erros de sintaxe.

  • Por conversar diretamente com o Kernel, e conseqüentemente com o processador, programas binários rodam visivelmente mais rápidos que programas em script.

  • Por ter que “criar” um código que o Kernel do Sistema Operaciona entenda, programas binários são extremamente não-portáveis, já que cada Sistema Operacional tem seu Kernel diferente.

Tendo tudo isso em vista, vamos aprender umas das linguagens mais famosas, C. Você deve estar se perguntando, mas por que C e não C++ ou Java por exemplo? Simples, C não tem frescuras, se você aprender a programar em C, você aprende qualquer tipo de linguagem, seja ela estruturada ou orientada a objetos (ok, não é BEM assim, mas é quase isso), você ganha uma lógica de programação absurda aprendendo C. Depois de aprender C direito, até Assembly fica fácil.

Sem mais delongas, vamos começar nossa primeira parte do tutorial, necessidades e sintaxe.

Necessidades

Básicamente você vai precisa de um bloco de notas e de um compilador. Claro que uma IDE completa ajuda (e muito), mas não é necessário. Eu comecei utilizando o DJGPP (que pode ser encontrado aqui http://www.delorie.com/djgpp/), recomendo que vocês utilizem esse também, já que vocês vão apenas fazer programas básicos de DOS, nada complexo como um programa com interface gráfica (acreditem, complica e muito), não será necessário nenhum compilador complexo como o Visual Studio, DEV C++, ou outro do tipo. Além disso, o DJGPP utiliza o gcc e gdb, ou seja, GNU, e GNU significa Linux, Linux significa poder, quando for passar para as coisas mais complexas (como threads ou malloc), você verão a diferença absurda que o compilador pode fazer.

Façam o download de uma IDE (RHIDE ou Emacs está bom), o compilador C (gcc) e um debuger (gdb).

Sintaxe

Muita gente fala: “Em C, os cristais se mostram como grafite, ou como cristais, nunca se sabe.”, ou seja, podemos escrever um programa em C de várias formas, ao longo dessa parte, vamos chegar nesse programa, mostrado agora de 3 formas diferentes de escrita:

1)

#include <stdio.h>

int main(void){ int i=0; printf(“Digite um número:”); scanf(“%d”,&i); printf(“Você digitou %d\n”,i); return 0; }

2)

#include <stdio.h>

int main(void

){ int i=0;

printf(“Digite um número:”);scanf(“%d”,&i);

printf(“Você digitou %d\n”,i); return 0;}

3)

#include <stdio.h>

int main(void){

int i =0;

printf(“Digite um número:”);

scanf(“%d”,&i);

printf(“Você digitou %d\n”,i);

return 0;

}

Podemos ver que em um pequeno programa, isso não é um grande problema, mas pegue um programa com algumas páginas de linhas e escreve como na forma 1 ou 2 e me diga se é possível se encontrar no mesmo. Existem várias teorias sobre como se deve escrever um programa, qual a identação correta e tudo isso, honestamente, eu gosto da número 3, chamada de K&R, ela é dessa forma pois data da época que os terminais tinha apenas 25 linhas por 80 caracteres, além de conservarem bastante espaço, dividem o programa em blocos, me acostumei assim, gosto assim, e isso é 100% pessoal mesmo, utilize a que for melhor para você.

Vamos separar esse programa por partes e definir a sintaxe de cada parte.

—-parte1—-

#include <stdio.h>

—-parte2—-

int main(void){

—-parte3—-

int i=0;

—-parte4—-

printf(“Digite um número:”);

scanf(“%d”,&i);

printf(“Você digitou %d\n”,i);

return 0;

}

A sintaxe de um programa em C é bem simples. Na parte 1 declaramos tudo que for diretiva de pré-processamento ou declaração global ou de funções. Tudo que começar com # é considerado uma diretiva de compilação, existem várias pré-definidas, agora vamos ver apenas a #include, que literalmente inclui no seu programa tudo que for definido no arquivo apontado por include. Parece complexo, mas não é, isso foi o que realmente diferenciou o C quando ele chegou, das outras linguagens como por exemplo COBOL. No arquivo stdio.h, temos definidas várias funções, dentre elas, a printf() e a scanf(). Caso não existisse o #include, teríamos que re-escrever essas funções em todo programa que fosse utilizá-las, pouco útil não? Podemos fazer muito mais nessa parte, como declarar variáveis globais (que serão vistas no programa inteiro), estruturas, funções e muitas outras coisas avançadas, vamos ficar com o básico.

A parte 2 é a declaração da função main, que todo programa (não biblioteca) precisa ter. Existem algumas formas de se declarar a main

  1. int main(void)

  2. int main();

  3. int main(int argc, char *argv[])

  4. void main(void)

  5. void main()

  6. vod main(int argc, char *argv[])

Toda a main, teoricamente, deveria retornar algo para o SO, 99.99% das vezes esse retorno é um número indicando o resultado do programa, 0 se tudo ocorreu bem, ou algum outro número indicando um erro, por isso as formas 4,5 e 6 são depreciadas. Existe também os dois parâmetros mágicos argc e argv. Talvez você não entenda agora, mas argc é a quantidade de argumentos do programa, e argv[] é um vetor de caracteres com esses argumentos. Um exemplo simples, se chamássemos um programa chamado hello, dessa forma:

$ ./hello teste 1 2 3

teríamos o argv valendo 5 e o vetor argv estaria dessa forma:

argv[0] = “./hello”

argv[1] = “teste”

argv[2] = “1″

argv[3] = “2″

argv[4] = “3″

Em C, começamos contando do 0, e não do 1. Não se preocupe se você não entendeu agora isso, mais para frente iremos explicar como utilizar argc/argv.

A parte 3 é a parte onde se declaram as variáveis. C é uma linguagem estruturada, ou seja, depende de estruturas, pessoalmente eu acho que um programa fica extremamente mais simples de ser lido, se logo no inicio da função você já enxerga as variáveis sendo utilizadas, você tem uma idéia mais clara do que a função ou o programa irá fazer, é exatamente isso que essa parte está fazendo, declarando variáveis.

A parte 4 é literalmente o resto do programa.

Por enquanto é só pessoal, aguardem para um pouco da sintaxe de C.

About Zarnick

Programer, sysadmin, guitarrist, and Italian. That's what I am. Plain simple.
C/C++, Tutorials , ,