Programação moderna em C - Aula 1: Funções main() e printf()

แชร์
ฝัง
  • เผยแพร่เมื่อ 28 ธ.ค. 2024
  • Na primeira aula, começamos do começo: a função main. Concentramos esta aula na explicação do esqueleto de um programa em C.
    Esqueceu de prepara o ambiente? Dá uma olhada na Aula 0: Preparando o Ambiente • Programação moderna em... - não deixe de assistir!
    Dúvidas? Poste nos comentários!
    -Conteúdo:
    Fernando Mercês (@MercesFernando)
    -Revisão técnica:
    Leonardo Sena (@slayer_owner)
    Otávio Augusto (@otavioarj)
    -Edição e capa:
    Paulo Arruzo (@pauloarruzzo)

ความคิดเห็น • 124

  • @tonyitalia7798
    @tonyitalia7798 5 ปีที่แล้ว +19

    Comecei a acompanhar o curso e já na segunda aula fiquei impressionado com tantas coisas legais que foram mostradas e que nunca vi em nenhum curso dito profissional.
    Parabéns.
    Vou fazer alguns testes para prosseguir com a novas aulas.

    • @mestresplinter2467
      @mestresplinter2467 4 ปีที่แล้ว +4

      Puta que pariu, irmão. Esse curso é foda pra caralho. Não tive nenhuma aula de algorítmos com NADA disso, com professores phd em arrombação na casa do caralho.

  • @mathstylish
    @mathstylish 3 ปีที่แล้ว +6

    Essa aula abriu muito a minha mente e olha que eu já to há 2 ano conhecendo a área. Aqui podemos ver como o C de faculdade é superficial. Fiz o que você disse e passei algumas horas na documentação do printf e aprendi muita coisa e como funciona fprintf, sprintf, etc.. Obrigado msm, de coração

    • @mentebinaria
      @mentebinaria  3 ปีที่แล้ว +3

      Que feedback incrível, Matheus! É exatamente o que queremos que aconteça. 💚

    • @mathstylish
      @mathstylish 3 ปีที่แล้ว +4

      @@mentebinaria Eu sou o tipo de pessoa que não gosta de ir pra níveis mais altos sem saber o porquê deles existirem. Então eu to querendo meio que "resetar" a minha mente e descer níveis pra entender melhor as coisas. O que eu, querendo ser um programador de verdade, e de verdade eu não digo só aprendendo o superficial de uma linguagem, indo pra framework, fazer crud's e SPA's e já achar que sei programar, quero aprender de verdade. O que vc recomenda como base essencial? Abraços

  • @0LeonardoViana1
    @0LeonardoViana1 7 ปีที่แล้ว +22

    do geito que vc explica uma criança de 3 anos aprende C.
    parabens Fernando!

    • @zeneto2157
      @zeneto2157 4 ปีที่แล้ว +7

      Colega. Sem faltar com respeito: Jeito... Isso em entrevista de emprego é determinante.

  • @nailtoncp
    @nailtoncp 5 หลายเดือนก่อน

    Didática incrível, parabéns mais uma vez, Mercês.

  • @3dferr
    @3dferr 6 ปีที่แล้ว +11

    Muito bom!! Melhor curso de C que eu já estudei! Tava procurando um assim bem raiz mesmo, direto no shell.

  • @estoquelmsplmsp9054
    @estoquelmsplmsp9054 3 ปีที่แล้ว +1

    Só tenho a agradecer pela sua iniciativa e por você estar compartilhando o seu conhecimento. Andei batendo muito a cabeça por ai, e sangrei de ler para aprender C raiz no shell e vim. Seu curso é Top. Eu te agradeço.

  • @balbino4
    @balbino4 3 ปีที่แล้ว +2

    Não tem como não gostar de suas aulas! Simplesmente fantásticas!
    Muito obrigado por compartilhar seus conhecimentos.

  • @balbino4
    @balbino4 ปีที่แล้ว +1

    Muito obrigado, Fernando.

  • @iminfinity1699
    @iminfinity1699 2 ปีที่แล้ว

    E lá vamos nós 🙏

  • @yurincmt
    @yurincmt 4 ปีที่แล้ว +4

    Caraca, é muita coisa nova em uma aula só hahaha

  • @mateus72483
    @mateus72483 7 ปีที่แล้ว +2

    Esse curso é muito bom! Parabéns! Tem quase 1 ano que estou programando em C e aqui pude ver algumas técnicas que pode me ajudar muito e já elucidei algumas dúvidas que eu tinha tanto em C quanto em Shell!

  • @JamesFontexX
    @JamesFontexX ปีที่แล้ว

    você é mt bom cara, sou iniciante na programação e decidi aprender C, cntg ta sendo muito maneiro

  • @Ramonviagem
    @Ramonviagem 4 ปีที่แล้ว

    Boa essa aula.

  • @franciscolima4707
    @franciscolima4707 2 ปีที่แล้ว

    Caramba, to impressionado com o echo, que comando maravilhoso

  • @SilvaPauloPedro
    @SilvaPauloPedro 2 ปีที่แล้ว

    Olá, tudo bem? Espero que sim. Estou super adorando tuas vídeo-aulas, são excelentes, ainda mais que traz muitas dicas, também, de VI. Parabéns!

  • @becauro
    @becauro 5 ปีที่แล้ว +1

    O cara não apenas entrega conteúdo, ele entrega um conteúdo já MASTIGADO. Pra entender só precisa, no mínimo, ter UM ouvido e saber LER. Kkk

  • @thisEstefano
    @thisEstefano 7 ปีที่แล้ว +2

    Cada vídeo melhor, com certeza farei o curso até o final !!

  • @ftda8058
    @ftda8058 7 ปีที่แล้ว +3

    Valeu mercês não para não pelo amor de deus vlww

  • @kledsonsilva4457
    @kledsonsilva4457 4 ปีที่แล้ว

    Se não for uma, mas a melhor aula de C que eu já acompanhei.

  • @munizcarlos297
    @munizcarlos297 5 ปีที่แล้ว +1

    Show de bola esse curso!!! To querendo entender do kernel do linux.

  • @fabioaquinoa
    @fabioaquinoa 5 ปีที่แล้ว +1

    Cara você esta de parabéns, sua didática é ótima, e com excelente dicas. TOP Total!!!
    Obrigado.

  • @FredericoPissarra
    @FredericoPissarra 7 ปีที่แล้ว +26

    Uma dúvida recorrente (me perguntam muito isso) é sobre o conteúdo dos arquivos de cabeçalho (headers ou .h)... Acho importante dizer que eles NÂO SÃO BIBLIOTECAS.
    Claro... assumo que você vai falar mais disso quando introduzir o conceiro de declaração versus definição...
    []s

    • @brunoborges3866
      @brunoborges3866 7 ปีที่แล้ว +4

      Headers são arquivos onde ficam escritos os protótipos das funções, ou seja, criamos um arquivo.c com as funções que queremos e depois criamos um arquivo.h onde ficam o protótipo dessas funções do arquivo.c. Para mais entendimento : www.cprogressivo.net/2013/09/Header-cabecalho-o-que-sao-para-que-servem-como-criar-e-usar-seus-arquivos-.h.html
      Explicação básica. Mas sim em termos gerais muitos se referirão a eles como bibliotecas

    • @HamiltonGJr
      @HamiltonGJr 5 ปีที่แล้ว +1

      De fato ouço muito que os headers são bibliotecas. Importante ressaltar que não são.

  • @GercinoJr
    @GercinoJr 6 ปีที่แล้ว +1

    Opa! segunda aula assimilada! que venha a próxima!

  • @AmericanAdvancedStudios
    @AmericanAdvancedStudios 7 ปีที่แล้ว +4

    Parabéns pela excelente iniciativa, sei programar em Python e estava começando a pesquisar sobre C, vou começar a acompanhar. Ótima didática!

  • @leandromartins457
    @leandromartins457 7 ปีที่แล้ว +1

    Muito maneiro cara!

  • @thiagolim682
    @thiagolim682 7 ปีที่แล้ว +1

    Show de bola

  • @bjardel2010
    @bjardel2010 5 ปีที่แล้ว +1

    Ótimo curso cara! Muito claro, abrangente: aprendo linux, vim, c, etc. Parabéns e muito obrigado.

  • @ember2658
    @ember2658 4 ปีที่แล้ว +1

    Dizem que é boa prática nunca usar e sempre usar "stdio.h", não lembro exatamente o problema relacionado, mas atualmente a forma com aspas para headers padrão são normalmente aceitos pelo compilador, então abandonei os .

  • @renatoac1975
    @renatoac1975 4 ปีที่แล้ว

    Parabéns Fernando !!!

  • @gameplaysupernoob
    @gameplaysupernoob 7 ปีที่แล้ว

    Muito bom, seus dois últimos vídeos de programação não apenas abordou o uso do vim que é um editor que tenho bastante interesse como futuro developer como também incentivou bastante a minha pessoa a querer reaprender a linguagem criada pelo grande e já falecido Dennis Ritchie.

  • @testeBugTest
    @testeBugTest 5 ปีที่แล้ว

    to maratonado o c ta bem legal o conteudo, é bacana percebe q coisas do c tipo o
    são usadas e muitas linguagens

  • @leonardosena4047
    @leonardosena4047 7 ปีที่แล้ว +1

    Ah... Obrigado pela dica da exclamação na frente! Eu usava o Ctrl+R para buscar os últimos comandos executados.

  • @creonte38
    @creonte38 7 ปีที่แล้ว

    Muito boa aula! Hands on total!

  • @andrelopes3500
    @andrelopes3500 7 ปีที่แล้ว +1

    nossa vc explicou tintin por tintin, estou adorando este curso

  • @TheThibac
    @TheThibac 4 ปีที่แล้ว

    Aula incrível, estava buscando algo assim. Programação o mais próximo do shell. Excelente curso.

  • @raulibrahim9711
    @raulibrahim9711 7 ปีที่แล้ว

    Estou na espera da proxima aula :3

  • @Vulto166
    @Vulto166 4 ปีที่แล้ว

    Eu to revendo os videos pq tem muito conte[udo pra fixar. C é foda.

  • @CervejaComXadrez
    @CervejaComXadrez 7 ปีที่แล้ว +1

    a função main() só não executada quando a chamada parte da bios, gerenciadores de boot e onit de OS quando escrito e C não usa o main() mais sim é executado um jump para a execução do registrador apontado por si.
    no numaboa.com.br explica esses tipo de tratamento, que foi o local que lembro de ter lido sobre essa excessão.

  • @TRADER2020FX7
    @TRADER2020FX7 6 ปีที่แล้ว

    Excelente curso !

  • @Guirfi
    @Guirfi 7 ปีที่แล้ว

    Muito boa as aulas Mendes(isso pq estou na segunda ahaha), eu não sei nada de C e tava querendo usar o VIM para programa com ele e encontro uma playlist com tudo isso e uma otima didatica, muito obrigado por compartilhar o conhecimento e seu tempo com essas videos aulas.

  • @guilhermefernando-develope763
    @guilhermefernando-develope763 7 ปีที่แล้ว +1

    muito bem explicado, parabéns, ótima didática

  • @Peter-xk8vb
    @Peter-xk8vb 5 ปีที่แล้ว

    Um lugar bacana para olhar também é o "Exploit Database", dá pra puxar muita coisa de lá.

  • @FrancivanBezerra
    @FrancivanBezerra 7 ปีที่แล้ว +5

    Muito boa a iniciativa de dar um curso de linguagem C aqui no TH-cam. Continue com os vídeos!
    Quanto à função main(), de acordo com a especificação mais atual da linguagem C (ISO/IEC 9989:201x -- open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf , página 31), ela é o ponto de entrada de todo programa escrito em C. Essa característica pode ser alterada caso o compilador utilizado permita, mas esse não é o comportamento padrão da linguagem.
    Existe um macete para que o programa pareça não estar iniciando pela função main, que é usar a diretiva de pré-processamento #define para criar um apelido para ela.
    #define entry main
    int entry(void) { ... }
    Curiosidade: em C++ construtores de objetos podem ser executados antes da chamada à função main().

    • @leonardosena4047
      @leonardosena4047 7 ปีที่แล้ว +5

      Então, mas concorda que ela ainda não foi alterada? No final ela está como "main()" de qualquer maneira. Pode ser comprovado quando for feito o disassemble. Por exemplo:
      $ objdump -d prog | awk -v -RS= '/^[[:xdigit:]].*/'
      E você verá ambos símbolos: "main" e "_start". Ou seja, o "main()" só não foi escrito na maneira tradicional:
      int main(void)
      Mas foi escrito de outra forma, através de diretivas:
      #define whatever main
      Para manipular o entry point pode ser escrito algo do tipo:
      void _start(void)
      {
      // alguma coisa
      }
      E na hora da compilação usar a flag "-nostdlibs" ou "-nostartfiles" (dependendo da ocasião), quando for buscar a função "main"...
      $ gdb prog -batch -ex 'disas main'
      Provavelmente não terá o output desejado, com uma mensagem dizendo que nenhum símbolo pôde ser carregado. Pois, óbvio, o "main" não foi definido desta vez.
      Essa sua técnica também se aplica quando tu gera um object file ao invés do binário direto e aplica o objcopy para mudar o entry point:
      $ objcopy --redefine-sym whatever=main prog.o
      Por fim, compila para gerar o binário... o "main" ainda estaria lá.
      Contudo, volta ao que o Fernando Mercês havia falado: Nunca vi um programa C sem a função main.

    • @leonardosena4047
      @leonardosena4047 7 ปีที่แล้ว +2

      Outra maneira legal, só que é mais criativa... eu já usei para "renomear" a syscall write:
      #define reigns(r,a,I,N,i,n,g,b,l,O,o,d,y) i##g##o##I##N
      #define sl4y3r reigns(h,a,t,e,w,o,r,l,d,W,i,d,E)
      Nisso... ao invés de eu escrever "write", escrevo "sl4y3r".
      Tô ligado que isso ficou uma merda, é um poc antigo que tenho no gist há 10 meses atrás e mostrei o trecho que interessa.

    • @FrancivanBezerra
      @FrancivanBezerra 6 ปีที่แล้ว

      Tem um outro jeito que faz com que a main() não seja nem criada. É só redefinir a função _start() e compilar com o parâmetro -nostartfiles do gcc.
      #include
      #include
      int custommain(void)
      {
      puts("Programa em C sem a função main()");
      return 0;
      }
      void _start()
      {
      int ret = custommain();
      exit(ret);
      }
      Compilar com: gcc -o sem_main sem_main.c -nostartfiles
      Obviamente, não dá pra usar esse artifício em qualquer programa, já que _start() está sendo redefinido.

  • @srblue2046
    @srblue2046 6 ปีที่แล้ว

    As aulas são muito boas

    • @srblue2046
      @srblue2046 6 ปีที่แล้ว

      Exelente didática

  • @brenoferrazdeoliveir
    @brenoferrazdeoliveir 7 ปีที่แล้ว

    Excelente aula!

  • @Ramonviagem
    @Ramonviagem 4 ปีที่แล้ว

    sim no kali 202.1 nao tem calculadora bc?

    • @HamiltonGJr
      @HamiltonGJr 4 ปีที่แล้ว +1

      Deve ter, porque Kali descende do Backtrack, que descende do Debian. Mas se não tiver, use o comando
      sudo apt install bc.
      Acho que o Kali não necessita o sudo porque o usuário já opera como root.

  • @enriqueizel
    @enriqueizel 7 ปีที่แล้ว

    Que aula f*%#, parabéns

  • @josemartins6021
    @josemartins6021 5 ปีที่แล้ว

    parabenx excele aula amigo

  • @englucasfernandes1655
    @englucasfernandes1655 ปีที่แล้ว

    Caramba cara, tua aula equivale a umas 10 de outros cursos de C por aí!

  • @multipermiso
    @multipermiso 3 ปีที่แล้ว

    parabéns pela aula, a didática é muito boa mesmo, gostei muito deste curso.
    só fiquei com uma duvida, a função main, precisa ter o argumento void dentro do parêntesis?, eu já programei vários exercícios sem colocar o void dentro da função main, qual é a utilidade?

    • @mentebinaria
      @mentebinaria  3 ปีที่แล้ว +1

      Muito obrigado! Precisar não precisa, mas é mais correto. Isso porque quando você declara uma função assim(), tá dizendo ao compilador que essa função pode ser chamada com qualquer número de argumentos. Logo, uma chamada assim(3, 4, “lala”) compila.
      Já quando você especifica com void que a função não recebe argumentos assim(void), o compilador emitirá um erro caso tenta chamar a função assim(“lala”, 3...) ou qualquer número de argumentos maior que zero. O único jeito certo de chamar a função é assim().
      Se curtir a comunidade, considera se cadastrar em menteb.in e menteb.in/discord - tem muita discussão legal sobre C lá. ☺️
      Abraço!

    • @multipermiso
      @multipermiso 3 ปีที่แล้ว

      @@mentebinaria obrigado pela resposta, vou entrar nesses links que mandou.
      abraço

  • @renatomelo2249
    @renatomelo2249 7 ปีที่แล้ว +1

    Podia ter uma aula sobre expressões regulares em c

    • @HamiltonGJr
      @HamiltonGJr 4 ปีที่แล้ว

      Expressões regulares é um assunto que precisa de atenção na Internet, pois realmente não tem muita coisa.

  • @m.graminha8573
    @m.graminha8573 3 ปีที่แล้ว

    Professor, excelente aula! Fiquei com uma dúvida, entretanto. Pq o retorno '0' da função saiu como true? Pq pelo que entendi, o echo só será executado após o && se o primeiro comando retornar true. Mas pensava que para isso ocorrer, era necessário retornar '1'. Pensei errado?
    Obrigado!!

    • @davikwiecien6494
      @davikwiecien6494 2 ปีที่แล้ว

      Como é uma convenção retornar 0 em execuções bem-sucedidas, creio que nessa situação em específico 0 é considerado true.
      Mas eu também fiquei na dúvida, inclusive, se trocar && por ||, a mensagem não é impressa, sendo que em expressões relacionais com ||, pelo menos uma condição precisa ser verdadeira.

    • @mentebinaria
      @mentebinaria  2 ปีที่แล้ว

      Demorei a responder, sorry. Mas sim, na convenção do SO o 0 é uma execução sem erros. Qualquer outra coisa é falha, na maioria das arquiteturas. Isso é para o SO, para ser usado com a função exit(), no caso, exit(0) ou exit(EXIT_SUCCESS) e exit(1) ou exit(EXIT_FAILURE).
      Continuando… um return 0 no final da main é o mesmo que chamar exit(0), ou seja, encerra o programa com um código de erro para o SO saber se a execução foi bem sucedida ou não. Isso é uma convenção “fora” da linguagem da C. É no SO! 😉
      No shell do Unix/Linux o comando depois do && será executado se o comando anterior *for executado com sucesso, ou seja, retornar EXIT_SUCCESS, que é 0*. Acho que vou fazer um vídeo pra explicar isso melhor. ☺️

  • @femoyo
    @femoyo 4 ปีที่แล้ว

    estou com duvida sobre a ordem em q é lido o comando, o ret inicialmente era 0 e depois ele atribuiu o printf e imprimiu no mesmo instante ou terminou de ler todo o codigo para soltar os print ? na hora q imprimiu o ret ele ja era int ?

    • @viniciusfelix1197
      @viniciusfelix1197 3 ปีที่แล้ว +1

      A linguagem C é compilada, então primeiro seu arquivo.c é compilado(transforma todo código fonte(texto que vc escreveu) em código de máquina(executável)), na primeira aula ele mostrou o comando: file hello* , que mostrou a diferença entro o código fonte e executável. Ou seja, ele lê tudo e depois executa(printa).

  • @TecnocraciaLTDA
    @TecnocraciaLTDA 5 ปีที่แล้ว +2

    Algumas notas sobre a aula:
    - não precisa escrever o "return 0;" pode ser escrito como return EXIT_SUCCESS;
    - não precisa colocar o void dentro do int main();
    - e o comando "hd" não existe no fedora, você terá de escrever "hexdump -C", caso não tenha o pacote instalado, dê o comando "sudo yum install util-linux" ou "sudo dnf install util-linux" para ser possível usar o comando.
    Uma boa aula Fernando!

    • @eziodasilva9846
      @eziodasilva9846 5 ปีที่แล้ว

      Uso Fedora 31, procurei man hd e apareceu coisas sobre hard disc. Em man hexdump tem bastante informação.

    • @HamiltonGJr
      @HamiltonGJr 4 ปีที่แล้ว

      Gosto de usat EXIT_SUCCESS no return no final do código em C e EXIT_FAILURE dentro do exit(). Mas é interessante lembrar de incluir a stdlib.h para isso.

  • @leonardosena4047
    @leonardosena4047 7 ปีที่แล้ว +10

    Curiosidades:
    No padrão POSIX (capítulo 3, versículo 206! kkkkkkkkkkkk), quando uma linha não termina com uma '
    ' (newline), o mesmo não é considerado uma linha. Neste caso, é por isso que alguns arquivos de configuração quando não há uma linha extra, pode dar merda ou até mesmo nem ser executada. Devido à isto, quando fechar a função principal, "deve" adicionar a linha extra:
    1. #include
    2. int main(void)
    3. {
    4. puts("mente binaria");
    5. }
    6.
    ~
    Eu, particularmente, nunca tive problemas disso por compilação, provavelmente o compilador faz um bom trabalho quanto à isso. Por outro lado, é normal isso dar merda nas demais manipulações de textos diretos do (ba)sh. Por isso que classifiquei como um tipo de "curiosidade", as demais definições de POSIX Standards" podem ser vistas em:
    (3.206:pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_206)
    E aos manolos que vão começar a utilizar o "man page", o comando '-k' é bem útil. ahuahauahuah
    (Se tiver no Linux)
    $ mandb -c # para carregar/atualizar a db
    $ man -k printf # fazer a busca
    Uma coisa legal também é que... os compiladores de C++ não compilam quando não encontram a declaração da função. Ao contrário dos compiladores C, que gera uma "declaração implicita"
    , um arquivo objecto... e no momento em que o código for linkado, trazendo a biblioteca padrão, o compilador verá essa declaração implítica com a função (ex: printf, que faz parte da biblioteca padrão [glibc]) e, finalmente (mesmo obtendo algumas mensagens de atenção do GCC: "Warning:"), conseguirá uma declaração explícita.. tornando o código funcional como se tivesse adicionado a diretiva para stdio.h!

    • @leonardosena4047
      @leonardosena4047 7 ปีที่แล้ว +4

      Ah... Esqueci de mencionar, quando você disse sobre o retorno ser 0 (zero), significa que o programa rodou corretamente. Mas olhe só que maneiro quando retiramos o "return 0;"
      --------- hello.c ---------
      #include
      int main(void)
      {
      printf("mentebinaria.com.br
      ");
      }
      Se compilar no padrão C99:
      $ gcc -std=c99 -o hello hello.c
      O programa vai rodar, e quando olhar o retorno, ele realmente irá mostrar um zero, porque na definição o "exit" de C99 torna zero quando sucedido.
      Mas se compilar no padrão C89, o retorno não será zero. Vejamos:
      $ gcc -std=c89 -o hello hello.c
      $ !.
      ./hello
      mentebinaria.com.br
      $ !echo
      echo $?
      19
      Esse 19 é justamente os 19 caracteres (não incluindo o "new line", lógico) contidos no printf! :)
      $ !. | wc -c
      ./hello | wc -c
      19
      Ou seja, isso inclui até nas definições de C K&R (Kernighan & Ritchie) e C ANSI.
      Isso acontece porque o retorno está implícito, então quando um registrador retorna um valor, nas definições antigas -- citadas acima -- imprime um valor, do qual seria o "garbage value". Já as definições mais "modernas" imprime de acordo com o comportamento da execução do programa.

    • @leonardosena4047
      @leonardosena4047 7 ปีที่แล้ว +2

      como C++ foi padronizado em 1998... provavelmente deve acontecer a mesma coisa! Porém ao invés de ser C99, em C++ seria o C++98!

    • @ftda8058
      @ftda8058 7 ปีที่แล้ว +1

      Valeu Slayer, to curtindo muito os teus comentários, não para não por favor.
      Tem alguma sugestão do que fazer pra entender um pouco mais sobre os compiladores c99, c89, clang e gcc além de ler manual? obrigado brother

    • @leonardosena4047
      @leonardosena4047 7 ปีที่แล้ว +2

      Mencionando outra parada, essa eu tenho aprendido por causa do Frederico Pissarra, dele ter mostrado como listar as macros com o gcc:
      $ gcc -E -dM < /dev/null
      Por conta disso tinha pesquisado um pouco sobre essas flags e acabei aprendendo essa:
      $ gcc -v -E -

    • @leonardosena4047
      @leonardosena4047 7 ปีที่แล้ว +3

      Eita... valeu manolo!
      Então cara, acredito que não tenha segredos... mas uma coisa que eu tenho costume que pode diferenciar de alguns é de ler documentações antigas. As vezes vejo algumas referencias que só consigo acessar a tal doc via "web.archive.org".
      Confesso que eu não li inteiro o manual do GCC e de nenhum outro compilador é gigante e, abordam muitas coisas que eu não estou afim de saber no momento -- porque certas coisas sai do escopo do estudo.
      Por outro lado, eu procuro ler sobre essas definições[1][2][3] e a história por trás... não priorizo, mas leio em algum momento que eu estou incapaz de estudar algo técnico (ex: no ônibus). Durante a pesquisa de alguma coisa sobre o compilador, a maioria das vezes eu caio no grupo do google[4] e fico lendo até o final, para saber até onde foi a discussão.
      [1] C11: open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf -- Já foi mencionado aqui pelo Francivan Bezerra. E nesse mesmo link tem os demais:
      ** C99: www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
      [2] pubs.opengroup.org/onlinepubs/9699919799/ -- mencionei esse também
      [3] C89/C90: read.pudn.com/downloads133/doc/565041/ANSI_ISO%2B9899-1990%2B[1].pdf
      E de bônus, tem esses links:
      port70.net/~nsz/c/
      clc-wiki.net/wiki/C89
      Apesar de eu ter caído nesses grupos quando faço as pesquisas, eu não faço parte de nenhum deles. Então, eu não acompanho a lista eu só leio até aonde a discussão vai... mas caso esteja curioso quais são essas listas:
      [4] com.lang.c
      groups.google.com/forum/#!forum/comp.lang.c
      ** comp.lang.c++
      groups.google.com/forum/#!forum/comp.lang.c++
      ** comp.os.linux
      groups.google.com/forum/#!forum/comp.os.linux
      ** comp.std.c
      (Inclusive, uma pergunta recente é se ainda vale a pena estudar C K&R... pra quem está buscando aprender C, acho legal dar uma lida nessa lista)
      groups.google.com/forum/#!topic/comp.std.c/gMPbDvlF30o
      Como pode ter percebido, eu não tenho um lugar fixo, vou sempre pegando algum link de referencia. Ah.. também tem um lugar muito maneiro que chama-se "Linux Documentation Project".
      E fora todos esses aí... ainda tenho o costume de pesquisar no Quora, porque lá você pode ter a visão mais "confiável". Por exemplo, se você ir lá e perguntar sobre kernel linux, capaz do Robert Love te responder (ele é quem escreveu um monte de livros sobre Kernel Development e Linux in a nutshell).

  • @AmiltonJustino
    @AmiltonJustino 7 ปีที่แล้ว

    Muito bom. Obrigado.
    Mercês, qual pacote tem o programa "hd" ?

    • @glauciofonseca26
      @glauciofonseca26 7 ปีที่แล้ว +1

      e o pacote hexdump

    • @FredericoPissarra
      @FredericoPissarra 7 ปีที่แล้ว

      Um outro pacote que pode te interessar é o 'ht'.
      No antigo DOS eu usava um programinha chamado HACKER'S VIEW... esse é o mesmo cara... Execute-o com 'hte '.

    • @mentebinaria
      @mentebinaria  7 ปีที่แล้ว +2

      O HIEW (Hacker's View) ainda é mantido e muito usado na indústria de segurança. É pago.
      O HT Editor (hte) não é o mesmo, mas se parece de fato. É livre. ;-)

  • @LucenirPiovesan
    @LucenirPiovesan 7 ปีที่แล้ว +1

    Kra, eu nunca programei na minha vida, o que voce recomenda para começar a aprender?

    • @arnaldqueiroga4185
      @arnaldqueiroga4185 6 ปีที่แล้ว +1

      Canal Piovesan Assista todos os vídeos deste Canal em C, te garanto que depois disso, aprender qualquer linguagem se tornará mais fácil pra você!

  • @mr.pablodelosmarbles9438
    @mr.pablodelosmarbles9438 7 ปีที่แล้ว

    Como e que sais do Vim? Tens sempre de digitar ':' + 'x' + 'enter'? Ou ha uma maneira mais facil (como e o caso de python ctrl +D)?

    • @yakimura96
      @yakimura96 7 ปีที่แล้ว

      Mr.Pablo de los Marbles x sai salvando, q sai, mas se tivsr alteração ele nn permite, então usa q!, e ele sai forçado, ou wq que é write quit

    • @yakimura96
      @yakimura96 7 ปีที่แล้ว

      Desconheço outra forma, mas sou básico no vim

    • @美久斗瑠
      @美久斗瑠 7 ปีที่แล้ว

      Mr.Pablo de los Marbles Da pra fazer mapeamento de teclado no arquivo .vimrc, colocando uma combinação de tecla no teclado, ou apenas uma única tecla, valendo como um comando.
      Mas não me lembro como faz, pesquisa sobre como editar o .vimrc

    • @eziodasilva9846
      @eziodasilva9846 5 ปีที่แล้ว

      A primeira vez que usei o VIM fiquei apavorado... depois desses vídeos to de boas. O poder do conhecimento ilumina :)

    • @HamiltonGJr
      @HamiltonGJr 4 ปีที่แล้ว

      :x é a mais fácil. A outra é :wq pra gravar e sair, :q pra sair quando não houve alterações e :q! pra sair sem gravar.Pelo que entendi, você queria um comando sem uso de enter no final. VI é de outros tempos, sem interface gráfica.

  • @renatomelo2249
    @renatomelo2249 7 ปีที่แล้ว

    Aula bem legal, só poderia usar um colorscheme um pouco mais legível no vi

    • @HamiltonGJr
      @HamiltonGJr 4 ปีที่แล้ว

      O color scheme mais legal pra mim é o desert, que se não me engano, era o que estava sendo usado. Mas para ficar melhor no vídeo, creio que o murphy é mais interessante mesmo. Mas na utilização diária, é questão de gosto... hehe.

  • @leandroaraujo1731
    @leandroaraujo1731 7 ปีที่แล้ว

    tem algum comando no terminal do opensuse equivalente ao "hd"?

    • @美久斗瑠
      @美久斗瑠 7 ปีที่แล้ว

      Leandro Santos É só instalar o hd (hexdump)

    • @renanmarquetti1894
      @renanmarquetti1894 3 ปีที่แล้ว

      Eu usei o o seguinte comando
      Yay -S hxdump
      Mas para isso tem que ter o yay instalado, tem vários tutorias na internet para isso

  • @Nicholas7506
    @Nicholas7506 7 ปีที่แล้ว

    Quando eu dei echo após exibir o resultado do Hello, não apareceu nada, fui no vi e incrementei 1 , recompilei e não apareceu nada novamente. Estou usando o raspberry com raspian para acompanhar as aulas, será que o problema é com o meu sistema Linux que é diferente da VM utilizada na aula?

    • @juliocgfreitas
      @juliocgfreitas 7 ปีที่แล้ว

      "echo" puro, sem o argumento "echo $?" \?

  • @otaviowcr
    @otaviowcr 4 ปีที่แล้ว +1

    Sei que fazem 3 anos, mas tenho uma pergunta: algúem teria uma tabela com todos os operadores de saída % e seus significados ??

    • @mentebinaria
      @mentebinaria  4 ปีที่แล้ว +1

      Vê se ajuda: en.wikipedia.org/wiki/Printf_format_string

    • @otaviowcr
      @otaviowcr 4 ปีที่แล้ว

      @@mentebinaria obrigado!!

    • @HamiltonGJr
      @HamiltonGJr 4 ปีที่แล้ว

      Todos os bons livros de programação em C têm essa tabela. The C Programming Language, por exemplo. O livro do Deitel, muito famoso, tem essa tabela. Mas a fonte mais completa e definitiva está nas man pages: é só digitar no terminal man 3 printf. No restante do curso o Mercês vai mostrar essa fonte.

  • @HamiltonGJr
    @HamiltonGJr 5 ปีที่แล้ว +2

    Não me lembro bem onde aprendi isso, mas aprendi que o "programa mínimo" em C é main(){}., deixando que o compilador assuma o retorno como int e os parâmetros como void. Então creio que a piada esteja valendo... todo programa em C que se preza tem a função main... rsrsrs

  • @ob0rr4ch4
    @ob0rr4ch4 6 ปีที่แล้ว +1

    vc abriu o manual do printf no console
    ~$ man 3 printf
    mas de onde veio esse parâmetro 3? oque é esse 3? asdjkasdas

    • @mentebinaria
      @mentebinaria  6 ปีที่แล้ว +1

      É o capítulo do manual. 😉

    • @ViniciusOsti
      @ViniciusOsti 5 ปีที่แล้ว +1

      "man 3 " é para ver capítulo sobre funções da biblioteca padrão de C.
      experimenta ver "man man" pra ver o que significa esse segundo parâmetro.

    • @HamiltonGJr
      @HamiltonGJr 4 ปีที่แล้ว +1

      man é o paginador do manual do sistema Linux. Tem 9 capítulos e o capítulo 3 é dedicado às funções da linguagem C, que é nativa de todo sistema Unix-like (como o Linux).

  • @Rocha-Tch
    @Rocha-Tch 3 ปีที่แล้ว

    Parabéns não >
    Decepcionou...> :) Aprendir + nesta duas aulas do que lendo pdfs.

  • @itamarribeiro8865
    @itamarribeiro8865 4 ปีที่แล้ว

    Maravilha, é um curso de C mas de brinde ganha-se um curso de Bash

    • @HamiltonGJr
      @HamiltonGJr 4 ปีที่แล้ว

      Um pouco de tudo: C, bash, man pages, vim e assembly.

  • @Zknosk
    @Zknosk 4 ปีที่แล้ว

    me ensina esse ssh linux ai no seu mac por favor

    • @mentebinaria
      @mentebinaria  4 ปีที่แล้ว

      O macOS tem cliente SSH por padrão. Qual a dúvida? Ah, considera postar no fórum. É mais fácil por lá: menteb.in/forum

  • @joao7135
    @joao7135 5 ปีที่แล้ว

    function! Executar(arq)
    if &filetype == 'c'
    :exec '!gcc -o /tmp/a.out' a:arq ';/tmp/a.out'
    endif
    endfunction
    nnoremap :w :call Executar(shellescape(@%))
    Achei esse script por aí nas interwebs. Ele compila o arq.c na pasta dos arquivos temporários e mapeia a tecla para disparar no modo de comandos do VIM(esc), é só você criar(se ainda não o tiver. dá um CTRL-H na pasta do seu usuario pra ver se o arquivo tá lá, pq ele é oculto) o arquivo .vimrc na sua home/seuusuario, e colar lá.

  • @int0x805
    @int0x805 2 ปีที่แล้ว

    O universo conspira para não aprendermos C... Eu estava assistindo e apareceu um monte de anúncios de cursos de Python.

  • @FredericoPissarra
    @FredericoPissarra 7 ปีที่แล้ว +1

    Quando ao main()... well... tem a porcaria do Windows (WinMain)... :)

  • @rivelinodomingo1955
    @rivelinodomingo1955 7 ปีที่แล้ว +1

    muito boa essa aula... algo que pode completar e ajudar a entender o funcionamento das variáveis é o vídeo desse cara aki m.th-cam.com/video/FO9QJdMn-cw/w-d-xo.html