Linguagem C


  Introdução

  O C é uma linguagem estruturada, isto é, possui uma organização do código que nos permite uma melhor maneira compreender e trabalhar. Ele foi criado por Dennis M. Ritchie, na década de 70.
  Como na maioria ds linguagens de alto nível, o programa é traduzido a partir de um código fonte para linguagem de máquina e então executado (o Basic é interpretado).
  Afinal, o que vem a ser traduzido ou interpretado?
  Um programa é traduzido, quando um novo programa equivalente ao fonte é criado em linguagem de máquina. Por exemplo, o compilador pega seu programa fonte escrito em C (.c) e cria um novo programa equivalente ao seu em linguagem de máquina (arquivo .com ou na memória). Já o programa interpretado, cada instrução do seu programa (geralmente linha a linha) é interpretada em tempo real, sendo convertida para linguagem de máquina e executada.
  A versão do C do MSX é compatível com a do PC, em relação aos comandos básicos, isto é, se você fizer um programa em C no MSX e levar o fonte para o PC e compilar, funciona.
  Este curso tem como finalidade familiarizar você à linguagem C do MSX, incluindo a utilização da blibliotecas .h, próprias do C.

  Iniciando

  O primeiro passo é instalar um compilador C para o MSX. Entretanto, nada impede de se utilizar um compilador C no PC para o aprendizado.
  Na seção Programming da Funet (http://www.msxarchive.nl), encontramos o diretório "C", com os seguintes arquivos:
 MSX-C_Library.zip
 MSX-C_v1.2.zip
 c--.pma
 c--srcs.pma
 hitech-1.pma
 hitech-2.pma
 hitech-3.pma
 hitech-4.pma
 hpatches.pma
  Há três compiladores C para MSX: o MSX-C da ASCII, o C-- e o Hi-Tech C. Vamos utilizar nesse curso o pacote "hitech", com o Hi-Tech C.

  Descompacte o pacote "hitech-1.pma", utilizando o descompactador pmext.exe para PC (encontrado na própira Funet) ou o unar para Linux. Copie o conteúdo para um disquete de MSX.
  Pelo MSX-DOS, digite C e o nome do programa, SEM EXTENSÃO. Cuidado: se você colocar a extensão, o compilador irá apagar o seu programa !!
  Na imagem ao lado, pegamos o exemplo 10.c, disponível para download na página principal de cursos dessa página (exercícios). Corresponde à parte da teoria que fala sobre o switch.
  Ao lado, podemos observar todo o trabalho de compilação do programa "10.c".
  Se algum erro surgir, este é indicado e a compilação é interrompida. Podem haver ainda alertas (warnings), que não interrompem a compilação.
  Se a compilação for bem sucedida, o arquivo 10.com surge. Este é o arquivo contendo o programa em linguagem de máquina, pronto para rodar sob o DOS.
  Rode o programa, digitando 10 no prompt do DOS e responda à pergunta feita pelo programa.

  Obs: o pacote "hitech-3.pma" contém o manual completo do compilador, em inglês.

  Infelizmente não existe um editor de texto junto com o Hitech C. Se você possuir o MSX 2, aconselha-se o uso do editor MPW (Mac Program Write), também encontrado na Funet. Senão, existem diversos outros para o MSX 1.


  Meu primeiro programa em C

  Vejamos alguns exemplos, comparando-se com o Basic do MSX. Mãos à obra!

  Exemplo 1:
Basic C:
10 print"O MSX vive!"  #include <stdio.h>

int main(void)
{
  printf("O MSX vive!");
  return 1;
}

  Exemplo 2:
Basic  C:
10 for f=1 to 10
20 print f,"O MSX vive!"
30 next f 
#include <stdio.h>

int f;

int main(void)
{
  for (f=1; f<=10; f++)
    printf("O MSX vive!");
  return 1;
}

  A linguagem C, diferentemente do Pascal, contém algumas de suas principais funções dentro de bibliotecas em arquivos ".h". Portanto, é necessário carregar a biblioteca correspondente a função que é chamada no programa. Por exemplo, a função printf() é uma função da biblioteca stdio.h.
  O Pascal marca o inicio e o fim do programa com begin e end respectivante. O C marca o inicio com a chave aberta { e fecha com a chave fechada }.

  Importante: no compilador do MSX, devemos indicar as bibliotecas utilizando-se aspas (""). Esse tipo de indicação faz o compilador buscar bibliotecas no diretório corrente, em vez de bibliotecas do sistema, no qual estão localizadas normalmente em outros diretórios e são indicadas pelos sinais de maior e menor (<>). Assim, temos para o exemplo 1:
#include "stdio.h"
int main(void)
{
  printf("O MSX vive!");
  return 1; 
}


  Variáveis

  Diferente do Basic, o Pascal e o C precisam que nós delcaremos o tipo da variável que iremos trabalhar. Isto é importante saber para futuras aplicações.
  Mas por quê fazer isto? Porque todas as variáveis armazendas na memória são dados e estes dados podem representar diversas coisas, como: um número inteiro, um numero real, um caractere, uma cadeia de caractere etc. Além de saber qual o tipo de dado, é necessário também conhecer o tamanho por ele ocupado: 1, 2, 3, 4, ..., N bytes. Exemplificando, se dissermos que a variável IDADE é do tipo SHORT INT, indicamos que o dado é um valor inteiro e de tamanho 1 byte.
  Os programas em C precisam ter uma indicação de inicio e fim, tanto no programa principal, como nas decisões, loops (if, while, for) e funções.

  As variáveis podem ser:

Nome No C Tamanho
Caracter não sinalizado unsigned char 1 byte (0 a 255)
Caracter char 1 byte (-128 a 127)
Enum enum 2 bytes (-32768 a 32767)
Inteiro não sinalizado unsigned int 2 bytes (0 a 65535)
Curto short int 1 bytes (0 a 255)
Inteiro int 2 bytes (-32768 a 32767)
Longo não sinalizado unsigned long 4 bytes (0 a 4294967295)
Longo long 4 bytes (-2147483648 a 2147483647)
Real float 4 bytes (3,4e-38 a 3,4e38)
Duplo double 8 bytes (1,7e-308 a 1,7e308)
Longo duplo long double 10 bytes (3,4e-4932 a 3,4e4932)

  No C, declaramos um variável da seguinte maneira: 
 <tipo_de_dado> <identificador> [= <valor_inicial>];
  Onde:   Ex:
 int idade = 20;

  No C clássico, não existe a variável do tipo string. Declaramos uma string como uma cadeia de caracteres (char). Ex:
 char nome[20] = "MarMSX";

  Importante: O C é sensível a letras maiúsculas e minúsculas, diferentemente do Pascal. Portanto, atenção à esta questão.


  Exemplo 3:
Basic  C: 
10 input"Qual o seu nome";n$
20 print"Ola,";n$ 
#include <stdio.h>

char nome[20];

int main(void)
{
  printf("Qual o seu nome? ");
  scanf("%s",nome);
  printf("Ola %s",nome);
}


  Funções

  As funções são sub-rotinas da linguagem C, que podem ser chamadas em qualquer lugar do programa, evitando duplicidade de código.

  Sintaxe:
 <tipo_de_retorno> <nome_da_funcao> (<lista_de_parametros>)
 {
   ...
   return <valor>
 }
  Onde:   Exemplo:
 #include <stdio.h>

 int soma(int a, int b)
 {
    return a+b;
 }

 int main(void)
 {
   printf("A soma de %d com %d é %d.", 2, 3, soma(2,3));
   return 1;
 }
  Saída:
  A soma de 2 com 3 é 5.

  O bloco "main" é o corpo principal de um programa em C. É o primeiro trecho a ser executado.
  A instrução "printf" chama a função "soma", imprimindo o resultado.

  Não existe o procedimento (procedure) do Pascal no C. Na realidade, o procedimento é um função que não retorna valor. Assim, utiliza-se o tipo de dado "void" para simular um procedimento no C. Ex:
  void imprime_numero(int num)
  {
    printf("Numero: %d", num);
  }


  Saidas / Entradas formatadas

  As instruções printf (escrita) e scanf (leitura) podem ser formatadas, sem a necessidade de realizar concatenações (junções). Assim, a instrução printf pode formatar toda saída de uma vez só, sem ser necessário quebrar a instrução, como é feito em Basic. Ex:
 Basic: PRINT "A soma de "; a ;" com "; b ;" é "; c
 C    : printf("A soma de %d com %d é %d.", a, b, c);
  A instrução printf possui a seguinte sintaxe:
 printf(<texto_formatado>, <lista_de_varaveis>);
  Onde:   A instrução scanf lê dados do teclado.

  A sintaxe do símbolo de formatação "%" é:
 % [flags] [largura] [.precisão] [F|N|h|l|L] [tipo de caracter]
  Onde:

Flag Descrição
- Justifica à esquerda.
+ Indica sinal - ou + no resultado.
branco Indica só o sinal de -.
# Converte o resultado para um formato alternativo.
 
Largura Descrição
n Pelo menos n caracteres são escritos, preenchendo com branco.
0n Pelo menos n caracteres são escritos, preenchendo com zero.
* Automático.
 
Precisão Descrição
nada Default.
.0 Default para inteiros, sem casa decimal para reais.
.n Imprime n caracteres, depois da vírgula.
* Automático.
 
Tipo Descrição
d Inteiro
i Inteiro
o Octal
u Inteiro não sinalizado
x Hexadecimal, com letras minúsculas
X Hexadecimal, com letras maiúsculas
f Real
e Real
g Real
E Real
G Real
c Caracter
s String
% Imprime o caracter %

 Exemplo:
 #include <stdio.h>

 int a=5;

 main()
 {
   printf("%04d",a);
 }
  Saida:
  0005

  Onde "04" preenche com quatro zeros o resultado e "d" indica que a saída é do tipo inteiro.


  Bibliotecas C do MSX

  Uma biblioteca é uma coleção de programas, que servem para auxiliar no desenvolvimento de softwares.
  Os pacotes hitech-1.pma, hitech-2.pma e hitech-4.pma possuem algumas biliotecas para o uso no C. Um bom exemplo disso é a bilioteca gráfica GLIB, disponível no pacote hitech-4.pma.
  A sintaxe para o uso de bibliotecas é:
 #include <nome_do_arquivo_header_da_biblioteca>
  Ex:
 #include <stdio.h>

 main()
 {
   printf("Olá\n");
 }
  Esse programa utiliza a biblioteca "stdio.h" para escrever na tela.



/MARMSX/CURSOS