Quaddro + MacMagazine: começando a programar em Ansi-C

Tabela Tiobe

Depois de passar uma visão geral sobre os primeiros passos para os interessados em desenvolver para iOS, percebi que vários leitores comentaram que querem ou estão estudando os fundamentos de C. Decidi então começar por aqui, para nivelar todo mundo.

Publicidade

Para acompanhar este artigo é bom que você tenha o Xcode instalado, se ainda não tiver já comece a baixar desde já:


Ícone do app Xcode

Xcode

de Apple

Compatível com Macs
Versão 11.6 (8.1 GB)
Requer o macOS 10.15.2 ou superior

Conceitos

Antes de sair gerando códigos e mais códigos, é preciso conhecer um pouco da linguagem e da sua estrutura.

Ansi-C é uma linguagem com quase 40 anos, que nasceu do trabalho de Dennis Ritchie com a colaboração de Ken Thompson. Sua criação se deu no Bell Labs e tinha como objetivo desenvolver a estrutura do sistema Unix.

Publicidade

Por ser extremamente estável e poderosa, com o passar dos anos a Ansi-C (ou simplesmente C) ganhou compiladores para as mais diversas plataformas, chegando ao grupo das linguagens de programação mais usadas do mundo. Um indicativo dessa importância e forte utilização pode ser visto no índice Tiobe, que lista as linguagens de programação mais usadas no mundo:

Tabela Tiobe

Clique para ampliar.

Publicidade

O gráfico a seguir mostra a estabilidade de utilização do C [vermelho] e a incrível ascensão do Objective-C [cinza escuro]:

Gráfico do Tiobe

Esses dados comprovam duas verdades absolutas: primeiramente, C é uma linguagem muito boa e difundida. Depois, que o Objective-C explodiu de 2010 para cá.

Publicidade

Voltando ao C e falando de sua estrutura, posso destacar as seguintes características:

  • Compilada: indica que o código é convertido para um executável binário.
  • Procedural: estrutura baseada na execução de procedimentos ou funções.
  • Fortemente tipada: característica marcante onde toda variável possui um tipo explícito.
  • Alto nível: refere-se a estrutura mais amigável e fácil para a programação.

Dessas características quero exemplificar agora o termo “alto nível”, que muitas vezes é conhecido mas não totalmente entendido. Não importa o quão simples seja o seu código, para o computador entender no final das contas é necessária uma sequência de instruções do tipo ligado e desligado, o famoso código binário.

Absolutamente tudo o que um computador executa é resultado de uma conversão do que nós escrevemos para o que a máquina entende. Por exemplo, se de um lado nós compreendemos um Gervásio, para a máquina entender esse texto ele precisa ser convertido para o código binário. O resultado dessa conversão é (um nada amigável para nós):

01000111 01100101 01110010 01110110 11100001 01110011 01101001 01101111

Isso já nos dá uma pista da diferença entre o que nós entendemos e o que o computador consegue processar. O termo baixo nível remete a uma linguagem “próxima” dessa abordagem que o computador entende. Isso está diretamente relacionado a uma estrutura de difícil compreensão por nós.

Para deixar isso bem claro, eu mostro aqui dois trechos de código que uso para falar dessa questão nos meus cursos da Quaddro:

Código de baixo nível

O código da esquerda é uma rotina para processa a letra A em uma linguagem de baixo nível, no caso Assembly. Já o código da direta mostra a exibição da letra A usando Ansi-C, que é de alto nível.

Então, de maneira simples e direta, quando uma linguagem é de alto nível isso quer dizer que sua forma de programação é mais “amigável” para nós. Já as linguagens de baixo nível possuem uma sintaxe mais para o “lado da máquina”.

Outra característica importante de ser comentada sobre a linguagem C é o uso de bibliotecas. Uma biblioteca é um arquivo que possui recursos que podem ser adicionados a outros programas. Imagine por exemplo que você está criando um programa para fazer cálculos de seno, tangente, usar valores de Pi e afins. Não há a necessidade de você criar uma variável com o valor de 3,1415, criar funções com as rotinas de cálculo de seno e demais elementos. Tudo isso já está pronto em um arquivo de sistema.

Esse é o contexto das bibliotecas. O arquivo math.h contém dentro dele uma série de recursos matemáticos prontos, então se você precisar usar esses recursos basta incluir o cabeçalho da biblioteca no seu projeto. Quem faz essa operação é o comando #include.

Isso é prático porque diversas rotinas comuns já estão prontas em bibliotecas do sistema, basta você incluí-las em seus projetos. Essa noção de bibliotecas nos ajuda a compreender a estrutura de um arquivo de programa em C.

A imagem a seguir ilustra essa estrutura. Um arquivo em C é composto basicamente por duas partes:

Corpo de programa em C

A área de cima agrupa as bibliotecas que foram incluídas ao arquivo — nesse caso, o cabeçalho da biblioteca stdio. Dentro dela está a função printf, que nos permite exibir mensagens de texto.

Na área de baixo nós temos o corpo do programa, que é onde estão as funções que definem a execução desse arquivo. Por definição todo programa em C deve ter uma função main, pois ela é a principal do nosso programa.

Nesse exemplo de código eu defini que, quando o programa rodar, o texto Quaddro será exibido na tela. Percebam que quem faz essa exibição é a função printf. E, como eu comentei anteriormente, para poder usar essa função de sistema eu tive que incluir a biblioteca stdio. Essa biblioteca (standard input output) contém recursos para entrada e saída de dados. Como quase todo programa em C resgata ou exibe valores, o cabeçalho stdio é um dos mais usados.

Uma vez que tenhamos passado por alguns conceitos básicos, a melhor forma de entender tudo isso é criando um projeto e “metendo a mão no código”.

Prática

Vamos criar um projeto para ver o funcionamento de tudo isso que você leu. Abra o Xcode (espero que você já o tenha instalado… :-P), e vá no menu File » New » Project. A tela apresentada vai lhe perguntar qual template de projeto você quer. Escolha na esquerda a categoria OS X Application e o template Command Line Tool. Este permite estudar de maneira direta a linguagem pura, sem distrações com interface por enquanto.

A imagem a seguir ilustra como a sua seleção deve estar:

Modelo do Xcode

Ao clicar em Next o Xcode irá pedir algumas informações como nome e identificadores. Definam o nome do projeto como ProgramandoC. O campo company identifier é usado como prefixo de nomenclatura para identificar seus projetos. A recomendação é usar o chamado domínio reverso: quaddro.com.br vira br.com.quaddro. Isso é usado quando vocês forem publicar seus aplicativos gerando chaves, certificados e perfis de projetos.

Uma questão importante é confirmar se o item Type está definido como C. Os outros tipos tendem a outras linguagens.

Nome dentro do Xcode

Após definirem isso o Xcode perguntará aonde você quer salvar seu projeto. Eu criei um pasta chamada Quaddro + MacMagazine, na Mesa.

Ao concluir essa etapa o Xcode carregará o projeto e exibirá uma série de painéis e áreas de conteúdo. Destaquei a separação dessas áreas:

Painéis do Xcode

Para ganhar um espaço na interface e focar sua atenção nos códigos, peço que você localize na área superior direta os botões de painéis View. Cada um desses três botões exibe/oculta uma área de interface: Navigator, Debug, Utilities. Desmarque o último (Utilities), que deve estar marcado quando o projeto é carregado. Isso vai ocultar o painel da lateral direta (que só vamos usar em artigos futuros), o que, além de focar a tela no código, também nos libera um espaço legal (quem aí tem tela pequena?).

Agora vamos ao que interessa: código! Na lateral esquerda (Navigator) são listados os arquivos de programação do seu projeto; como escolhemos o template básico de C, teremos apenas um arquivo. Clique no main.c para que ele seja carregado no Editor.

Sua tela deve estar assim:

Tela principal do Xcode

Agora aqueles que já programam estalam seus dedos e se sentem em casa. Analisando a estrutura do nosso arquivo de código, temos algumas partes bem definidas.

Tudo o que vocês estão vendo em verde são comentários (percebam o começo da linha com //). Um comentário é um texto de explicação ou ajuda que não é “processado”. Por padrão o Xcode insere uma sequência de comentários no começo do arquivo com informações gerais (nome do programa, nome do projeto, usuário atual do Mac, data e empresa).

O que nos interessa é a parte de baixo, o código em si. Percebam a estrutura básica que comentei imagens atrás. O começo do código com a área de inclusões, e depois o corpo do programa.

O código básico de um arquivo main.c gerado pelo Xcode é exibir a mensagem Hello World (o famoso “Olá Mundo”). Puxando os conceitos que vocês aprenderam agora há pouco, a função printf é responsável por exibir textos, mas para poder usá-la temos que incluir o arquivo stdio que contém essa função dentro dele.

Quer ver isso de forma clara?! Apague a linha do include do seu código. Pode fazer, sem medo. Ao não encontrar o include do stdio, o Xcode passa a não “conhecer” a função printf, e isso vai gerar um alerta (placa amarela na linha do código). Então o conceito é claro: para usar uma função de sistema precisamos incluir o arquivo que a define. Voltem com o include.

Tudo o que um programa C faz é definido de maneira sequencial no seu arquivo main, que no nosso caso exibe apenas uma mensagem printf. Já podemos até testar esse arquivo, cliquem no botão com ícone de Play no canto superior esquerdo da barra de ferramentas ou usem o atalho Command + R (Run).

Isso vai processar o seu código, confirmar que ele não tem erros e no final do processo compilar seu programa. Lembra lá atrás quando eu disse de código binário?! Essa etapa de compilar é exatamente isso, o sistema vai “traduzir” o que você escreveu de maneira fácil para nós, para a versão que o computador consegue “entender” e processar.

Se tudo funcionar numa boa, nosso código disse para o computador exibir uma mensagem. Ao chegar no trecho do código com o printf, o sistema exibirá o texto no Console. Que por padrão é exibido na área de baixo do código.

Console do Xcode

Vocês podem fazer testes inserindo outros printf no seu código. Percebam que o código que já veio pronto conta com um \n no final do texto do printf. Essa é uma instrução para “quebrar” linha. Adicione alguns printf sem usar \n na mensagem para testar e você entenderá seu funcionamento.

Esse programa básico nos dá uma boa noção da estrutura do C nesse primeiro contato com o Xcode. Conhecemos os conceitos chaves, o tipo de projeto Command Line Tool, os tipos de painéis do Xcode e a estrutura do corpo de programa usando função de cabeçalho de biblioteca externa.

Para esse artigo não virar um mega-texto de 15 páginas, vou segurar para a próxima coluna o avançar de temas com códigos de variáveis, operadores e condicionais. Para os interessados em aprofundar esse estudo de conceitos iniciais, recomendo a leitura dos seguintes posts do blog da Quaddro: 1, 2, 3.

Para um estudo mais colaborativo, convido todos a postarem suas dúvidas no fórum de programação da Quaddro. Lá nossos alunos, instrutores e moderadores participam para o estudo e o crescimento da comunidade.

Posts relacionados