diff --git a/aulas/02-dados-e-instrucoes/README.org b/aulas/02-dados-e-instrucoes/README.org index 794f7d1..78b0433 100644 --- a/aulas/02-dados-e-instrucoes/README.org +++ b/aulas/02-dados-e-instrucoes/README.org @@ -11,7 +11,7 @@ Programas podem ser entendidos como formas de manipular dados através de instruções para realizar tarefas. -** Instruções: +** Instruções - Declarações de variáveis e funções - Atribuições e alterações de variáveis @@ -22,7 +22,7 @@ instruções para realizar tarefas. Toda instrução simples é terminada com =;=. #+end_quote -** Dados: +** Dados - Constantes simbólicas - Expressões constantes @@ -34,7 +34,7 @@ Toda instrução simples é terminada com =;=. Tudo que expressa um valor é chamado de /expressão/. #+end_quote -** Exemplo (=x10.c=): +** Exemplo (=x10.c=) #+begin_src c #include @@ -58,7 +58,7 @@ int main(void) { - =num= → Acesso ao dado na variável =num=. - =num * 10= → Dado na variável =num= vezes =10=. -** Outro exemplo (=xconst.c=): +** Outro exemplo (=x10const.c=) #+begin_src c #include @@ -83,7 +83,7 @@ int main(void) { O valor de =MULT= será expandido no pré-processamento! #+end_quote -** Mais um exemplo (=quadrado.c=): +** Mais um exemplo (=quadrado.c=) #+begin_src c #include @@ -105,4 +105,71 @@ int main(void) { - =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=. + +** 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)]] diff --git a/aulas/02-dados-e-instrucoes/x10.c b/aulas/02-dados-e-instrucoes/x10.c index b5443fa..679d22b 100644 --- a/aulas/02-dados-e-instrucoes/x10.c +++ b/aulas/02-dados-e-instrucoes/x10.c @@ -1,10 +1,12 @@ #include +#include + int main(void) { int num; num = 5; - + printf("%d x 10 = %d\n", num, num * 10); return 0; } diff --git a/aulas/02-dados-e-instrucoes/xconst.c b/aulas/02-dados-e-instrucoes/x10const.c similarity index 100% rename from aulas/02-dados-e-instrucoes/xconst.c rename to aulas/02-dados-e-instrucoes/x10const.c diff --git a/aulas/02-dados-e-instrucoes/x10func.c b/aulas/02-dados-e-instrucoes/x10func.c new file mode 100644 index 0000000..ad44e19 --- /dev/null +++ b/aulas/02-dados-e-instrucoes/x10func.c @@ -0,0 +1,20 @@ +#include + +#include + +/* 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; +}