Estrutura Procedimental de um Programa, Metodologias de Desenvolvimento e Ambientes Integrados.
Objectivos
Ao final desta aula, o estudante deverá ser capaz de:
Estrutura
/* 1. COMENTÁRIOS (opcionais) */
// Comentário de uma linha
/* 2. DIRECTIVAS DE PRÉ-COMPILAÇÃO */
#include <stdio.h>
#define PI 3.14159
/* 3. DEFINIÇÕES GLOBAIS */
int contadorGlobal = 0;
/* 4. PROTÓTIPOS DE FUNÇÕES */
int soma(int a, int b);
void saudacao(void);
/* 5. FUNÇÃO main() */
int main() {
// Código principal
return 0;
}
/* 6. DEFINIÇÕES DE FUNÇÕES */
int soma(int a, int b) {
return a + b;
}
Elementos
Textos inseridos no código para documentar o programa — ignorados pelo compilador.
// Comentário de uma única linha (C99 e C++)
/* Comentário de múltiplas linhas
Pode ocupar várias linhas
Útil para cabeçalhos e explicações extensas */
Elementos
Instruções para o compilador, processadas antes da compilação. Começam com #.
// Inclusão de bibliotecas
#include <stdio.h> // Biblioteca padrão
#include "meuModulo.h" // Biblioteca local
// Definição de constantes
#define MAXIMO 100
#define MEDIA(a, b) ((a + b) / 2)
// Compilação condicional
#ifdef DEBUG
printf("Modo de depuração ativado\n");
#endif
#include insere o conteúdo de outro ficheiro. #define cria macros substituídas antes da compilação.
Elementos
Ponto de entrada de todo programa em C. É a primeira função executada.
int main() {
// Código
return 0;
}
void main(void) {
// setup
for(;;) {
// loop infinito
}
}
main() normalmente nunca termina — contém um ciclo infinito.
Elementos
Blocos de código que realizam tarefas específicas e podem ser reutilizados.
// Protótipo
int calcularMedia(int a, int b, int c);
// Definição
int calcularMedia(int a, int b, int c) {
return (a + b + c) / 3;
}
// Chamada
int resultado = calcularMedia(10, 20, 30);
| Componente | Descrição | Exemplo |
|---|---|---|
| Tipo de retorno | O que a função devolve | int, float, void |
| Nome | Identificador único | calcularMedia |
| Parâmetros | Valores que recebe | int a, int b |
| Corpo | Código executado | { return ...; } |
Exemplo
/* PROGRAMA: Calculadora Simples
AUTOR: Estudante ISPS
DESCRIÇÃO: Operações básicas entre dois números */
#include <stdio.h>
#define MSG_INICIO "Bem-vindo à Calculadora"
float somar(float a, float b);
int main() {
float num1, num2, resultado;
printf("%s\n", MSG_INICIO);
printf("Digite dois números: ");
scanf("%f %f", &num1, &num2);
resultado = somar(num1, num2);
printf("Soma: %.2f\n", resultado);
return 0;
}
float somar(float a, float b) {
return a + b;
}
Compilação
.c)#include, #define, remove comentários.obj)
Metodologia
Metodologia
Abordagem sequencial onde cada fase deve ser concluída antes da próxima começar.
Metodologia
Divide o projecto em partes menores (incrementos), desenvolvidas e entregues gradualmente.
Metodologia
Técnica recomendada para embarcados: desenvolve-se uma versão mínima funcional e adiciona-se funcionalidades gradualmente.
// VERSÃO 1: Apenas acende um LED
void main() {
setup();
for(;;) {
ligarLED();
}
}
// VERSÃO 2: Adiciona piscar o LED
void main() {
setup();
for(;;) {
ligarLED();
delay(1000);
desligarLED();
delay(1000);
}
}
// VERSÃO 3: Adiciona leitura de um botão
void main() {
setup();
for(;;) {
if(leBotao()) ligarLED();
else desligarLED();
}
}
Boas Práticas
Organiza visualmente o código, mostrando a hierarquia dos blocos.
for(;;){
ssdUpdate();
newKey = kpRead();
if (newkey != key){
newkey = key;
for(i=0;i<10;i++){
if (BitTst(key,i)){
lcdChar(i+'0');
}
}
}
}
for(;;) {
ssdUpdate();
newKey = kpRead();
if (newkey != key) {
newkey = key;
for(i = 0; i < 10; i++) {
if (BitTst(key, i)) {
lcdChar(i + '0');
}
}
}
}
Boas Práticas
| Tipo | Convenção | Exemplo |
|---|---|---|
| Variáveis | Minúsculas, camelCase | contador, temperaturaAtual |
| Funções | Primeira letra maiúscula | InicializarTeclado(), CalcularMedia() |
| Constantes | Maiúsculas, underscore | NUMERO_DE_VOLTAS, PI |
| Macros | Maiúsculas | #define MAX_TENTATIVAS 3 |
IDEs
IDE (Integrated Development Environment) — software que reúne várias ferramentas de desenvolvimento.
IDEs
| IDE | Características | Uso Recomendado |
|---|---|---|
| Code::Blocks | Gratuito, leve, multiplataforma | Iniciantes em C/C++ |
| Dev-C++ | Simples, gratuito, Windows | Primeiros passos |
| Visual Studio Code | Moderno, extensível | Desenvolvimento profissional |
| CLion | Pago, completo | Projectos complexos |
| Placa | IDE |
|---|---|
| Arduino Uno | Arduino IDE |
| Chipkit UNO32 | MPIDE |
| Freedom KL05z | Kinetis Design Studio |
IDEs
void setup(void) {
// Inicialização dos periféricos
kpInit();
lcdInit();
}
void loop(void) {
int tecla;
// Atualiza o teclado (debounce)
kpDebounce();
// Lê a tecla pressionada
tecla = kpReadKey();
// Exibe no LCD
lcdPosition(0, 0);
lcdNumber(tecla);
}
setup() corre uma vez; loop() corre continuamente.
Embarcados
Com comando
Sem comando
Prática
Analisa o programa abaixo e identifica:
#include <stdio.h>
#define PI 3.14159
float calculArea(float raio);
int main() {
float r, area;
scanf("%f", &r);
area = calculArea(r);
printf("%.2f\n", area);
return 0;
}
a) Directivas? b) Macro? c) Protótipo? d) main()?
Ordena as etapas:
Explica a diferença entre modelo cascata e desenvolvimento incremental. Qual é mais adequado para sistemas embarcados?
Escreve um programa que configure o pino 13 como saída e faça o LED piscar a cada 1 segundo.
Síntese
| Tópico | Conceitos-Chave |
|---|---|
| Estrutura do Programa | Comentários, directivas, protótipos, main(), funções |
| Função main() | Ponto de entrada, loop infinito (embarcados), retorno (PC) |
| Compilação | Pré-compilação → Compilação → Montagem → Ligação |
| Metodologias | Cascata, incremental, ciclo de vida |
| Boas Práticas | Indentação, nomenclatura, comentários |
| IDEs | Editor, compilador, depurador, gestor de projectos |
| Arduino IDE | setup() e loop(), bootloader |
Bons estudos e boa programação em C.