Nesta aula, vamos dar o primeiro passo prático na linguagem C: escrever um programa que exibe a mensagem "Olá, mundo!" na tela. Esse é um rito de passagem para programadores e nos permite entender a estrutura básica de um programa C, como incluir bibliotecas, definir o ponto de entrada e usar a saída padrão. Além disso, veremos como compilar e executar o código no terminal.

Ao final, você terá seu primeiro programa funcional e compreenderá cada parte dele. Vamos começar!

Estrutura mínima

Todo programa em C precisa de uma estrutura fundamental para ser executado. A estrutura mínima consiste em uma função principal chamada main, que é o ponto de entrada do programa. Quando o sistema operacional executa um programa compilado em C, ele procura pela função main e começa a execução por ali.

Além da função main, geralmente incluímos bibliotecas que fornecem funções prontas, como a printf para saída formatada. A biblioteca padrão é a stdio.h (Standard Input Output). A estrutura mínima, portanto, é:

#include <stdio.h>

int main() {
    return 0;
}

Esse programa não faz nada além de retornar 0 (indicando sucesso), mas já é um programa C válido. A partir daqui, podemos adicionar instruções dentro das chaves da função main.

#include e main

A diretiva #include é uma instrução de pré-processamento que insere o conteúdo de um arquivo (geralmente um cabeçalho, como stdio.h) no código fonte antes da compilação. O cabeçalho stdio.h contém declarações de funções de entrada e saída, como printf e scanf. Sem ele, o compilador não reconheceria essas funções.

A função main é obrigatória em programas executáveis. Sua assinatura padrão é int main(void) ou int main(), e ela retorna um valor inteiro para o sistema operacional. O valor 0 indica sucesso; valores diferentes indicam erros. A estrutura geral é:

#include <stdio.h>

int main() {
    // instruções
    return 0;
}

Note que as chaves { } delimitam o corpo da função, e cada instrução termina com ponto e vírgula.

printf

A função printf (print formatted) exibe texto formatado na saída padrão (geralmente o terminal). Ela está declarada no cabeçalho stdio.h. Para exibir uma mensagem simples, passamos uma string entre aspas duplas como argumento:

printf("Olá, mundo!\n");

O \n é um caractere de escape que representa uma nova linha (quebra de linha). Sem ele, o cursor permaneceria na mesma linha. A função printf também permite formatar variáveis, mas veremos isso em aulas futuras. Agora, vamos montar o programa completo:

#include <stdio.h>

int main() {
    printf("Olá, mundo!\n");
    return 0;
}

Esse é o clássico "Olá, mundo" em C.

Compilando e executando

Para transformar o código fonte em um programa executável, usamos um compilador C. O mais comum é o GCC (GNU Compiler Collection). Suponha que o arquivo se chama ola.c. No terminal, dentro do diretório do arquivo, execute:

gcc ola.c -o ola

Isso compila o código e gera um executável chamado ola (no Windows, ola.exe). A opção -o define o nome do executável; se omitida, o padrão é a.out (ou a.exe).

Para executar, no Linux/macOS:

./ola

No Windows (PowerShell ou cmd):

ola.exe

Você verá a mensagem "Olá, mundo!" impressa no terminal.

Caso o GCC não esteja instalado, você pode usar outros compiladores como Clang ou MSVC. Mas o GCC é amplamente disponível e recomendado para aprendizado.

Boas práticas

1. Sempre inclua a quebra de linha (\n) no final das mensagens para evitar que o prompt do terminal fique na mesma linha.
2. Use nomes de arquivo com extensão .c para que o compilador reconheça como código C.
3. Mantenha a indentação consistente (por exemplo, 4 espaços por nível) para legibilidade.
4. Retorne 0 no final da main para indicar sucesso.

Referências

Exercícios

  1. Escreva um programa C que exiba a mensagem "Bem-vindo ao curso de C!" na tela.

    ✓ Resposta:
    #include <stdio.h>
    
    int main() {
        printf("Bem-vindo ao curso de C!\n");
        return 0;
    }
  2. O que acontece se você omitir a diretiva #include <stdio.h> e usar printf? Teste mentalmente.

    ✓ Resposta:

    O compilador emitirá um aviso ou erro informando que a função printf não foi declarada. Em muitos compiladores, o código ainda compila com um aviso, mas o comportamento é indefinido (pode falhar ou funcionar por acaso). Sempre inclua o cabeçalho adequado.

  3. Modifique o programa "Olá, mundo" para exibir seu nome em uma linha separada, usando dois printf.

    ✓ Resposta:
    #include <stdio.h>
    
    int main() {
        printf("Olá, mundo!\n");
        printf("Meu nome é João.\n");
        return 0;
    }
  4. Qual é a finalidade do return 0; no final da função main?

    ✓ Resposta:

    O return 0; indica ao sistema operacional que o programa terminou com sucesso. Valores diferentes de zero geralmente indicam erro. Embora o compilador possa assumir return 0 implicitamente em C99 em diante, é boa prática escrevê-lo explicitamente.

  5. Compile e execute o programa abaixo. Ele funcionará? Por quê?

    int main() {
        printf("Teste\n");
        return 0;
    }

    ✓ Resposta:

    Provavelmente não funcionará ou gerará um aviso, pois falta a inclusão de <stdio.h>. O compilador não reconhecerá printf e emitirá um erro (ou aviso, dependendo das configurações). O código pode até compilar com avisos, mas não é confiável. Sempre inclua os cabeçalhos necessários.