[Música] Fala aí galera tudo bem bem-vindos a mais um vídeo aqui do papo binário e esse vídeo é o vídeo da aula um do curso de ser para quem não viu nós lançamos a aula Zero Onde a gente ensina a montar esse ambiente basicamente você precisa instalar uma máquina virtual Linux ou até usar o seu mesmo instalar a gente começou instalando dois programas né o VM e o gcc e nós já testamos e configuramos também o vim para que ele ficasse um pouquinho mais esperto na na para nos ajudar com a programação em C né bom o que eu vou fazer aqui vou dar um Clear limpar essa tela aqui nós temos os dois arquivos que nós geramos na aula zero né o Hello e o hello. c podemos mantê-los aqui por enquanto e na aula um nós vamos de fato entender eh basicamente esse programa que a gente montou na aula zero esse curso ele é devagar né a gente vai de aula em aula mas a gente vai construindo aí umas bases pro pro conhecimento da linguagem ser ser mais facilmente absorvido Então vamos lá se a gente editar aqui o o hello. c com o vi né que é o vim ele já tá aqui todo colorido já tá com as linhas já tá com tudo que a gente setou no ponto VM RC se você não setou isso se o seu não tá assim Provavelmente você não viu a aula zero volta lá que Lá ensina a montar o ambiente Eh ok nesse nesse nesse programa nós temos vários conceitos aí né para para para trabalhar né Vamos de linha em linha né o primeiro deles é esse essa diretiva chamada include né Isso daí é um comando do que a gente chama de pré-processador eh na prática o que esse o que esse comando vai fazer é pegar um arquivo né ele recebe um arquivo como argumento que nesse caso é stdi .
h ele vai pegar um arquivo e vai simplesmente como se fosse copiar e colar o conteúdo desse arquivo aqui no início do programa Mas para que isso né Eh nesse caso é necessário por qu Tem uma função aqui que não foi a gente que fez certo foi Tem uma função aqui que já tá pronta nós só usamos essa função é a printf e essa printf ela tá né justamente declarada né escrita lá toda montadinha para para ser utilizada nesse arquivo STD a. esse arquivo Ele tá em algum local aqui do meu diretório do meu do meu Linux né Eh mas ele já tá num local padrão de de arquivos p h para serem justamente incluídos em código fonte C por isso não preciso especificar o caminho dele basta utilizar a chave a maior que menor que maior que aqui e ele já já entra ali se a gente sair e buscar STD aí o p h a gente vê que tem vários várias versões dele aqui mas basicamente o que ele tá incluindo ali Muito provavelmente é esse aqui e o Sr include stdh nesse arquivo aqui tem a definição da função print F que já faz parte da biblioteca padrão de C então a gente não precisa se preocupar em alterar nem nada do tipo então a gente simplesmente usa a função né Eh como eu falei né O que tá em em usr include no caso aqui do Linux você não precisa colocar o caminho então voltando aqui ao vi isso aqui seria a mesma coisa que fazer aí seria com aspas duplas né e usr include stdu P H só que a gente não precisa disso esse caminho é dinâmico podemos fazer com menor q e maior q se a gente tiver um arquivo que a gente queira incluir depois né a gente pode fazer assim ó arquivo. H aí nesse caso aqui ele tem que est no mesmo diretório que o arquivo atual que esse ponto c esse hellow PC Ok mas não é o caso Então vou deletar essa linha e aí já vem mais um comandinho do vi se eu der um es aqui e apertar o d duas vezes DD eu eu apago a linha inteira né e já subo e removo toda a linha mesmo né E já se tiver algum texto abaixo ele já sobe porque a linha inteira foi removida ela não foi simplesmente e limpa ela foi removida mesmo então o arquivo tinha oito linhas e agora tem sete eh Ok então começando aí já falei aqui do include né é uma diretiva aí de pré-processamento tem outras né mas vamos começar com essa Eh vamos olhar aqui agora pra linha três o que que isso aqui tá fazendo né vamos entender esse programa aqui com mais propriedade eh o que que acontece um programa em C ele é todo dividido em funções funções são blocos de código né definidos aqui delimitados por Chaves blocos de código delimitado por chave na verdade dá para fazer bloco de código sem função Então essas chaves delimitam um bloco de código com essa construção antes delas eu especifiquei uma função e a função ela tem um um modelo né esse esse modelo aqui é o seguinte o primeiro a primeira palavrinha que vem antes dela é o tipo de retorno da função função é um bloco de código que vai normalmente ela recebe algum código ela faz algum trabalho com ele e ela retorna a algo certo então sei lá se tem uma função que soma números ela recebe os números a serem somados e ela retorna a resultado dessa soma Ok nó Vamos fazer uma aqui para para treinar mas essa primeira função é uma função então que qual o tipo de dela o que que ela retorna um int int né é uma variável do tipo inteiro um número inteiro né de 32 bits por padrão aqui nessa arquitetura que eu tô trabalhando Então é o número inteiro de 32 bits ou 4 by n mesma coisa depois vem o nome da função o nome da função nesse caso aqui é m e né que seria do inglês aí principal e tal seria é a função que do programa em C em geral né que se pre pel menos eu nunca vi um que não tenha tem essa função m né e é essa função que vai iniciar o código vai iniciar a execução de código do do que o programador colocou no programa certo então nós colocamos aí o printf não sei o que essa Teoricamente é a primeira função que o programador escreveu que vai ser executada ela é obrigat história né assim de uma de uma maneira geral né claro que pode haver algum caso aí que tenha não sei um programa sem uma m isso daí Aí já vai eh eu nunca vi mas ela em princípio ela é obrigatória em todos os programas em ser eh normais assim né comuns e e e ela precisa ter esse nome né Main né logo depois do nome da função e a gente vai criar outras funções e a gente pode dar o nome que a gente quiser mas essa m precisa se chamar m eh tem a gente abre um parênteses E aí entram os argumentos que essa função vai receber os também chamado de parâmetros ou seja o que que vai ser passado para essa função nesse caso aqui eu usei a palavra void né o comandinho uma palavra reservada do C que diz que essa né nesse caso aqui não vai receber nenhum argumento ela não recebe nenhum argumento eh e depois fecho o parênteses né quando eu acabo a minha lista de argumentos dela e abro o bloco para começar de fato o código da função como eu falei né Aí você escreve o que você quiser nesse caso aqui a gente escreveu dois printf que a gente vai vai olhar depois com mais calma mas em princípio vamos vamos partir aqui pro retorno que tá na linha seis é uma uma função que retorna O inteiro Então ela retornou nesse seis aí a gente programou de forma que ela retorne o valor zero o valor zero é um número inteiro né Eh apesar de tá zerado ele é um número inteiro e ele tá de acordo com esse retorno de função aí certo então se a gente sair compilar ele aqui de novo é pon barra Hello né onde é que foi parar esse retorno de função bom quem chama esse programa é o sistema operacional eh e ele chama por sua vez a biblioteca C padrão né E essa biblioteca C padrão chama Amém eh Amém ela retorna para quem a chamou né Toda a função retorna para quem a chamou eh Então quem chamou aí na na prática Quem iniciou esse processo de chamada foi o sistema operacional logo o retorno é para esse sistema operacional né E é assim que que a gente testa inclusive se um programa executou com sucesso ou não já vou falar disso mas o que que acontece para ver esse retorno no Shell do Linux a gente dá um Eco cifrão interrogação Tá lá esse retorno foi zero é o zero também só para fazer o teste ó a gente poder fazer um hello.
c e vamos retornar um aqui vou posicionar o cursor aqui em cima control a para dar um incremento como mostrei na aula zer 2 p x vou compilar de novo e executar agora se eu executar Se eu olhar o retorno eu tenho um né e isso é assim porque o programa pode retornar códigos de erro né e ele pode dizer por exemplo se retornar um significa que o programa não foi executado com sucesso né se retornar zero significa que foi com sucesso então o que que acontece eh no Shell por exemplo eu poderia fazer o seguinte ó eu executo Hello e eu faço isso aqui isso aqui isso aqui é parte do best né e o programa rodou com sucesso né dessa forma aqui vou dar um control l só para jogar isso pro início da do da telinha do terminal control L eh dessa forma aqui aquela segunda parte né do do desse comando em Shell eu executei o programa Hello o Shell vai testar a saída do Hello se for zero ele vai executar o que veio depois desse desse duplo e Comercial que é um end né uta Hello e se der certo ou seja se retornar zero executa esse Eco da direita do contrário ele não vai executar então se eu der um enter Aqui você vê que aquilo não executou né o Eco da direita não não aconteceu né o eco exibe um texto na tela e ele não exibiu se a gente alterar aquele retorno para zero vou dar um cont control x aqui para dar um decremento nele 2 p x compilar de novo e executar de novo essa mesma linha agora o Eco da direita foi executado porque o programa retornou zero Então esse retorno da M ele é muito utilizado para testar se um programa foi executado com sucesso ou não E aí foi criada uma convenção zero execução com sucesso qualquer coisa diferente de zero é uma execução que não não teve sucesso Ok Isso é um padrão de em Sistemas e Unix e Linux e é legal que a gente siga então então conforme a gente vai desenvolvendo os programas se houver algum erro a gente vai retornar alguma coisa diferente de zero normalmente um mesmo né ou pode ser um dois pode podem ter tipos de erros diferentes o que deu origem ao famoso código de erro né tabela de código de erro se retornar um é é porque tal coisa não funcionou se retornar o dois é porque outra coisa não funcionou e assim por diante Ok bom vou voltar aqui pro hello. C né vou apagar esse printf de baixo Então vou posicionar o c aqui na linha C DD tchau print f e agora a gente tem somente um printf e um retorno zero né vou dar um dos pontos w só para salvar tá lá e vamos olhar esse printf vamos olhar essa chamada de função bom como quando a gente define uma função a gente a chama pelo nome nós não definimos a print F aqui por qu porque ela tá definida dentro desse ponto ag que a gente tá dando include a gente tá incluindo no código então não é necessidade Claro de definir a printf aqui ela já está definida lá então a gente pode simplesmente chamá-la pelo nome printf né e a printf é uma função que recebe eh um ou mais argumentos né vamos ver isso como é que a gente vê isso a gente sair aqui do programa existe um manual no Linux no Capítulo 3 onde tem as funções de C então Man 3 print F tá aí ó Linux programmers manual né E E ele fala aí da Print F da F print F print F as primas dela as funções que funcionam de maneira similar e aqui ele diz exatamente como é o cabeçalho dessa função como ela é definida né Ele já fala pra gente aqui ó essa função tá na. então você tem que incluí-la eh e aqui tá o cabeçalho dela né o cabeçalho dela é o seguinte ela recebe ela retorna um tipo inteiro e ela recebe né um parâmetro o primeiro parâmetro dela né o primeiro argumento é um ponteiro para charar a gente vai entender isso depois né aqui o nome o nome pode ser qualquer coisa ele chamou de Format né de uma e um ponteiro constante ou seja ele não vai ser alterado que você passou para print foi um texto que não vai ser alterado por ela eh e depois aqui tem uma reticência rência significa que o número de argumentos é variável podem ser no caso aqui tem um né e depois pode ter mais 1 mais 2+ 3+ 4 + 5 é de forma variável porque a PRF ela tem um funcionamento bem específico né ela consegue fazer substituições que é o que a gente vai ver agora vamos voltar lá pro [Música] programa bom foi dito aqui então que a print F retorna um número inteiro interessante isso né a gente poderia Salvar esse retorno né vamos ver isso como é que a gente vai fazer isso vou dar o o aqui e eu comecei a inserir né aqui eu vou declarar uma variável do tipo inteiro que eu quero que armazene o retorno da Print F Então vou chamá-la de R né vou inicializá-la com valor zero e ponto e vírgula como todo programa em Sex press precisa de um ponto vírgula né no final de cada linha de comando então in iG 0 comecei ali OK vou dar um enter normalmente eu coloco um enter Assim entre as declarações de variáveis e os códigos em si e aqui eu vou armazenar O Retorno dessa função na variável nessa variável do tipo inteiro que é simplesmente fazer isso aqui ó iG a PR que que vai acontecer Chef vai executar né então esse texto vai ser impresso na tela e o retorno dela que é uma variável inteiro que eu não sei o que que é ainda vai cair dentro dessa variável Hat né vamos ver sair salvando gcc e vou executar o Hello Ok executou o papo binário tá não sei o que mas o retorno dela na variável R Será que tá aqui retornou pro sistema operacional bom Aqui tá o zero né que que é esse zero Esse é o zero do zero mesmo né acontece que eu armazenei o retorno da printf na variável depois não usei Então eu preciso printar esse retorno na tela para poder ver então que que eu vou fazer aqui eu vou dar um print F um outro print f n abre aspas duplas aqui retorno da printf anterior dois pontos e aqui entra a questão do formato que a printf suporta né Eh existem uma série de de de maneiras de escrever aqui eh um formato para que os próximos argumentos sejam substituídos dentro da da string de texto do texto que o printf Vai imprimir para inteiro normalmente a gente usa o d de decimal é um percent d perente D vou colocar o contra barra n para dar um para pular uma nova linha né Depois a gente vai falar mais disso E agora como é que eu passo o segundo argumento de uma função esse esse é o primeiro né O primeiro é aquel que o manual chamava de Format o segundo eu tenho que botar uma vírgula e esse segundo argumento da printf tem que casar justamente com esse formato que é colocado aqui para ser substituído como eu falei que o percent d É para um número inteiro para decimal né eu vou Justamente eu tenho que passar um número aqui que número é esse que eu quero passar eu quero ver o retorno da printf anterior então vou escrever aqui Justamente a variável Hat fecho aqui ponto e vírgula certo dei um esc e o que acontece essa printf tá sendo executada com um só argumento tá sendo chamada com um só argumento você vê que não tem nenhum percent aqui dentro porque não precisa é um argumento direto o retorno dela vai ser armazenado na variável Hat já essa printf aqui ela tem dois argumentos um é o Format esse texto só que esse texto Tem um caracter aqui que vai ser substituído esse perc D vai ser substituído pelo próximo argumento que no caso é justamente a variável Hat né e o conteúdo o valor dessa variável vai ser colocado aqui no lugar do perente d na hora que o printf rodar vamos ver se funcionando dois pontos x gcc de novo executei tá lá o retorno da printf anterior é 19 que será que é esse 19 bom vamos olhar o manual de novo Man 3 da printf se a gente descer mais aqui com a barra de espaço tem toda a descrição todo o texto né e aqui tem lá ó agora tô descendo com enter que vai mais devagarzinho que a barra de espaço vai de Página em página tem aqui ó o valor de retorno né E aqui ele diz Em caso de sucesso né Essas funções ou seja essa família aí de prints elas Retornam o número de caracteres que foram impressos excluindo o new byte depois eu vou falar disso usado para escrever Strings Então ela retorna O número de caracteres impressos ó que interessante se eu der um q aqui para sair do manual 19 né 19 é justamente olha vamos contar só que a gente não vai contar de um por um aqui vamos usar o Shell para contar se eu der um eco aqui nessa string vou copiar colar lá Pipe WC - C vou contar Quantos caracteres ela tem exatamente 19 na verdade o texto dela tem 18 mas existe um caracter de nova linha aí que é o Barra n né o contra barra n que foi impresto também que foi o que fez eh uma nova linha Foi o que fez a próxima a próxima coisa ser escrita na tela aparecer aqui embaixo na verdade tem um caracter de nova linha aí se a gente olhar os valores as para esses caracteres isso pode ser feito com programa HD do Linux a gente vê que cada letrinha tem um correspondente é um número é um byte correspondente na tabela Ask e por último o caracter de nova linha tá aqui representado pelo byte a que é 10 inde decimal então ele foi de fato impresso se ele não foi impresso eu posso até usar os o eco o eco já imprime ele por padrão se eu colocar a opção menos n o eco não imprime esse caracteres de nova linha você vai ver que a linha não é pulada ó o texto fica grudado com o que é impresso na sequência certo ou seja voltando aqui ao [Música] programa voltando ao hello.
C 19 caracteres foram impressos 18 desse texto mais esse caracter aqui que é o contra barra n né e aqui essa função printf ela também retornou Quantos caracteres foram impressos por ela mas eu não usei o retorno dela para nada né eu ignorei o retorno dela então o retorno dela ficou no Limbo né e não foi utilizado Ok então a gente viu né um basicamente a gente falou aqui hoje nessa aula 1 sobre a uma variável do tipo inteiro a chamada print f uma string que o printf recebe mais um contra barra n aqui nesse caso eu coloquei o contra barra n né E esse primeiro formato aqui vamos treinar mais agora esses formatos de printf vou apagar essa parte e agora já um outro comando do vi que é o x o x apaga de caracter em caracter Vou apagar aqui ó x x x x x vou deixar assim certo e esse printf aqui de baixo nós vamos fazer eh vamos treinar algum algumas impressões aqui então vou apagar aqui também com x Vou deixar só o percent d vou lá bom Primeiro vou deixar imprimindo aí a variável R OK depois do prente d eu vou botar um traço apertei o i para inserir né traço outro percent D traço outro percent D traço outro percent D Agora eu tenho quatro percent DS quatro números inteiros aqui para serem substituídos Isso significa que eu vou precisar de de de quatro argumentos aqui eu só tenho um que é o r que vai imprimir zero já que R tá sendo inicializado com valor zero tenho que colocar mais né então vou colocar aqui mais alguns valores 10 né em decimal vou colocar 10 em hexadecimal certo e a gente já vai treinando como escrever ex decimal em C Ok e vou colocar aqui um valor entre aspas simples chamado a maiúsculo a gente já vai entender por Ok então coloquei aqui três formatos Diferentes né e o primeiro vai receber o conteúdo da variável R que é zero o segundo perente D aqui vai receber o valor 10 o terceiro vai receber um valor 10 também porque a em hexadecimal é 10 né e o quarto aqui vai receber esse você vê que aqui aspas simples né é um valor as I certo é um valor asqui O valor é um valor numérico eh que é o o correlacionado da letra A maiúscula em as i e a gente vai ver qual que valor é esse vamos dar o dois pontos x esc 2.