mirror of
https://gitlab.com/blau_araujo/cblc.git
synced 2025-05-11 02:56:35 -03:00
Perguntas da aula 2
This commit is contained in:
parent
b31d0aa415
commit
f8cccca463
4 changed files with 95 additions and 6 deletions
|
@ -11,7 +11,7 @@
|
||||||
Programas podem ser entendidos como formas de manipular dados através de
|
Programas podem ser entendidos como formas de manipular dados através de
|
||||||
instruções para realizar tarefas.
|
instruções para realizar tarefas.
|
||||||
|
|
||||||
** Instruções:
|
** Instruções
|
||||||
|
|
||||||
- Declarações de variáveis e funções
|
- Declarações de variáveis e funções
|
||||||
- Atribuições e alterações de variáveis
|
- Atribuições e alterações de variáveis
|
||||||
|
@ -22,7 +22,7 @@ instruções para realizar tarefas.
|
||||||
Toda instrução simples é terminada com =;=.
|
Toda instrução simples é terminada com =;=.
|
||||||
#+end_quote
|
#+end_quote
|
||||||
|
|
||||||
** Dados:
|
** Dados
|
||||||
|
|
||||||
- Constantes simbólicas
|
- Constantes simbólicas
|
||||||
- Expressões constantes
|
- Expressões constantes
|
||||||
|
@ -34,7 +34,7 @@ Toda instrução simples é terminada com =;=.
|
||||||
Tudo que expressa um valor é chamado de /expressão/.
|
Tudo que expressa um valor é chamado de /expressão/.
|
||||||
#+end_quote
|
#+end_quote
|
||||||
|
|
||||||
** Exemplo (=x10.c=):
|
** Exemplo (=x10.c=)
|
||||||
|
|
||||||
#+begin_src c
|
#+begin_src c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -58,7 +58,7 @@ int main(void) {
|
||||||
- =num= → Acesso ao dado na variável =num=.
|
- =num= → Acesso ao dado na variável =num=.
|
||||||
- =num * 10= → Dado na variável =num= vezes =10=.
|
- =num * 10= → Dado na variável =num= vezes =10=.
|
||||||
|
|
||||||
** Outro exemplo (=xconst.c=):
|
** Outro exemplo (=x10const.c=)
|
||||||
|
|
||||||
#+begin_src c
|
#+begin_src c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -83,7 +83,7 @@ int main(void) {
|
||||||
O valor de =MULT= será expandido no pré-processamento!
|
O valor de =MULT= será expandido no pré-processamento!
|
||||||
#+end_quote
|
#+end_quote
|
||||||
|
|
||||||
** Mais um exemplo (=quadrado.c=):
|
** Mais um exemplo (=quadrado.c=)
|
||||||
|
|
||||||
#+begin_src c
|
#+begin_src c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -105,4 +105,71 @@ int main(void) {
|
||||||
- =int quadrado(int base)...= → Definição da função =quadrado=.
|
- =int quadrado(int base)...= → Definição da função =quadrado=.
|
||||||
- =return base * base= → Retorno da função =quadrado=.
|
- =return base * base= → Retorno da função =quadrado=.
|
||||||
- =quadrado(num);= → Chamada da função =quadrado=.
|
- =quadrado(num);= → Chamada da função =quadrado=.
|
||||||
|
|
||||||
|
** 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)]]
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
num = 5;
|
num = 5;
|
||||||
|
|
||||||
printf("%d x 10 = %d\n", num, num * 10);
|
printf("%d x 10 = %d\n", num, num * 10);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
20
aulas/02-dados-e-instrucoes/x10func.c
Normal file
20
aulas/02-dados-e-instrucoes/x10func.c
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* Protótipo da função x10 */
|
||||||
|
int x10(int num);
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
int num;
|
||||||
|
|
||||||
|
num = 5;
|
||||||
|
|
||||||
|
printf("%d x 10 = %d\n", num, num * 10);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Definição/implementação da função x10 */
|
||||||
|
int x10(int num) {
|
||||||
|
return 10 * num;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue