cblc/aulas/02-dados-e-instrucoes/README.org

176 lines
4.9 KiB
Org Mode
Raw Permalink Normal View History

2025-03-12 13:48:53 -03:00
#+title: Curso Básico da Linguagem C
#+subtitle: Aula 2: Dados e instruções
#+author: Blau Araujo
#+startup: show2levels
#+options: toc:3
* Aula 2: Dados e instruções
[[https://youtu.be/2KsvRJjshQ0][Vídeo desta aula]]
Programas podem ser entendidos como formas de manipular dados através de
instruções para realizar tarefas.
2025-03-16 10:30:59 -03:00
** Instruções
2025-03-12 13:48:53 -03:00
- Declarações de variáveis e funções
- Atribuições e alterações de variáveis
- Chamadas de funções
- Retorno de funções, etc...
#+begin_quote
Toda instrução simples é terminada com =;=.
#+end_quote
2025-03-16 10:30:59 -03:00
** Dados
2025-03-12 13:48:53 -03:00
- Constantes simbólicas
- Expressões constantes
- Operações lógicas e aritméticas
- Valores retornados por funções
- Endereços de memória, etc...
#+begin_quote
Tudo que expressa um valor é chamado de /expressão/.
#+end_quote
2025-03-16 10:30:59 -03:00
** Exemplo (=x10.c=)
2025-03-12 13:48:53 -03:00
#+begin_src c
#include <stdio.h>
int main(void) {
int num;
num = 5;
printf("%d x 10 = %d\n", num, num * 10);
return 0;
}
#+end_src
*** O que temos aqui:
- =int num;= → Declaração da variável =num=.
- =num = 5;= → Atribuição de um valor à variável =num=.
- =printf(...);= → Chamada da função =printf=.
- ="%d x 10 = %d\n"= → Primeiro argumento da função =printf=.
- =num= → Acesso ao dado na variável =num=.
- =num * 10= → Dado na variável =num= vezes =10=.
2025-03-16 10:30:59 -03:00
** Outro exemplo (=x10const.c=)
2025-03-12 13:48:53 -03:00
#+begin_src c
#include <stdio.h>
#define MULT 10 // Multiplicador.
int main(void) {
int num = 5;
printf("%d x 10 = %d\n", num, num * MULT);
return 0;
}
#+end_src
*** O que há de novo:
- =#define MULT 10= → Definição da constante simbólica =MULT=.
- =int num = 5;= → Inicialização da variável =num= na própria declaração.
- =num * MULT= → Dado em =num= vezes a expansão de =MULT=.
#+begin_quote
O valor de =MULT= será expandido no pré-processamento!
#+end_quote
2025-03-16 10:30:59 -03:00
** Mais um exemplo (=quadrado.c=)
2025-03-12 13:48:53 -03:00
#+begin_src c
#include <stdio.h>
int quadrado(int base) {
return base * base;
}
int main(void) {
int num = 5;
printf("%d^2 = %d\n", num, quadrado(num));
return 0;
}
#+end_src
*** O que há de novo desta vez:
- =int quadrado(int base)...= → Definição da função =quadrado=.
- =return base * base= → Retorno da função =quadrado=.
- =quadrado(num);= → Chamada da função =quadrado=.
2025-03-16 10:30:59 -03:00
** Dúvidas
*** Para que serve a função =main=?
A função =main= é o /ponto de entrada/ do programa, ou seja, é o ponto a partir
do qual o programa começará a ser executado. Quando a função =main= termina,
o programa é terminado retornando um valor inteiro (=int=) para o sistema,
que utilizará este valor como /estado de término/ do programa.
*** Qual é o significado de =void=?
No exemplo da aula, =void= (que significa /vazio/) é utilizado para explicitar
que a função =main= não receberá argumentos:
#+begin_src c
int main(void) { /* ... */ }
#+end_src
Isso não é obrigatório e existem situações em que a função =main= receberá
dados do ambiente de execução (sistema operacional), como argumentos de
linha de comando e variáveis exportadas para o programa, por exemplo:
#+begin_src c
int main(int arg, char **argv) { /* ... */ }
#+end_src
#+begin_quote
A palavra-chave =void= tem outros usos não relacionados com o caso
do exemplo da aula.
#+end_quote
*** Por que o tipo do retorno de =main= é =int=?
Para atender às especificações da linguagem ([[https://bolha.dev/blau_araujo/cblc/raw/branch/main/c17/iso-iec-9899-2017.pdf#subsection.5.1.2][5.1.2.2.1 Program startup]]).
*** A função =main= poderia retornar outros tipos de dados?
Em tese, sim, mas a função =main= tem um papel diferenciado e deve seguir
as especificações da linguagem.
[[https://youtu.be/IoLhY1teyOo][Video sobre o retorno da função main]].
*** A função =main= poderia retornar uma string?
Além do que foi respondido antes, nenhuma função pode retornar /vetores/:
e /strings/ são vetores de caracteres terminados com o caractere nulo (=\0=).
*** Por que o cabeçalho =stdio.h= foi incluído no programa?
Para que pudéssemos utilizar a função =printf=.
A linguagem C implementa muito poucas instruções nativas, deixando a
implementação de outras funcionalidades e abstrações para as funções da
biblioteca C padrão. Por sua vez, a biblioteca C padrão é muito grande
e possui centenas de funções implementadas. Então, para otimizar o
acesso a elas, nós só precisamos das declarações das funções que serão
efetivamente utilizadas nos nossos programas.
Nós poderíamos fazer essas declarações nos códigos onde elas fossem
utilizadas, mas a própria biblioteca padrão oferece vários /arquivos
de cabeçalhos/: arquivos contendo declarações de funções e outras
definições, que podem ser inseridos nos nossos códigos apenas
quando necessário.
- [[https://youtu.be/fdZYpZFUAZE][Vídeo sobre cabeçalhos e bibliotecas (parte 1)]]
- [[https://youtu.be/Sl-kJ6w0QaU][Vídeo sobre cabeçalhos e bibliotecas (parte 2)]]
2025-03-12 13:48:53 -03:00