#+title: Curso Básico da Linguagem C
#+subtitle: Exercícios
#+author: Blau Araujo
#+startup: show2levels
#+options: toc:3

* Exercícios da aula 1: História

- [[../../aulas/01-historia/README.org][Anotações da aula]]
- [[https://youtu.be/wqJQL5W9FIw][Vídeo]]

** 1. Pesquise e explique

As classificações abaixo são utilizadas para descrever as características da
linguagem C: pesquise e explique cada uma delas.

- Linguagem de alto nível;
- Linguagem compilada;
- Linguagem procedural;
- Linguagem imperativa;
- Linguagem estruturada.

** 2. Analise o programa

Dado o programa abaixo ([[../aulas/01-historia/salve.c][salve.c]]), explique cada uma perguntas nos comentários.

#+begin_src c
#include <stdio.h> // O que é isso e para que serve? 

// Por que todo o programma é escrito na função 'main()'?
int main(void) {
    
    puts("Salve, simpatia!"); // O que faz e como se usa a função 'puts()'?

    return 0; // Para que serve esta instrução? 
}
#+end_src

** 3. Compile, encontre, explique e corrija os bugs

O uso de /números mágicos/ (valores literais que não dão pistas de seus
significados) é desaconselhado porque dificultam a leitura semântica do
código. Sendo assim, nós utilizaremos a constante simbólica =EXIT_SUCCESS=,
definida na biblioteca padrão com valor =0=, em vez do inteiro literal =0= como
argumento da instrução =return=:

#+begin_src c
#include <stdio.h>

int main(void) {
    puts("Salve, simpatia!");
    return EXIT_SUCCESS
}
#+end_src

Observe o resultado da compilação:

#+begin_example
:~$ gcc salve.c -o salve
#+end_example

- Quantos *erros* foram encontrados e quais são eles?
- Quais são as correções sugeridas pelo =gcc=?
- Como ficou o código corrigido?

** 4. Compile, pesquise e responda

Dado o código abaixo (por exemplo, =main.c=):

#+begin_src c
#define EXIT_SUCCESS 0

int puts(const char *string);

int main(void) {
    puts("Salve, simpatia!");
    return EXIT_SUCCESS;
}
#+end_src

Compilação:

#+begin_example
:~$ gcc main.c
:~$
#+end_example

- Nenhum erro foi reportado, mas por quê?
- Como você executaria o binário resultante?

** 5. Pesquise e responda

Quando não explicitamos a especificação utilizada para compilar o nosso programa
(opção ~-std=PADRÃO~ do =gcc=), qual será o padrão utilizado e como podemos
confirmar isso pela linha de comandos?

