Livro de C

1. Livro de C

Cabreuvas
Cabreuvas

(usa Manjaro Linux)

Enviado em 06/04/2018 - 15:29h

Agora que eu estou bem confortável com uma distribuição, gostaria de aprender a programar.

Escolhi o C como porta de entrada, achei sua sintaxe boa, porém preciso de algum livro (de preferência gratuito rs), pois aulinhas no Youtube já estão enchendo o meu saco...

Alguma recomendação? Obrigado.


  


2. Re: Livro de C

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/04/2018 - 17:27h

Hehehe, confortável no gentoozinho da vida?
Requisitos:

* Saber 'ingreis'.
* Ter o GCC instalado 'no meu gentoo demorou 13 minutos para compilar tudo, no máximo.'


Eu achei esses:
http://www.inf.ufpr.br/lesoliveira/download/c-completo-total.pdf
https://phy.ntnu.edu.tw/~cchen/pdf/ctutor.pdf
https://www.tutorialspoint.com/cprogramming/c_basic_syntax.htm
https://www.cprogramming.com/tutorial/c-tutorial.html
http://www2.dcc.ufmg.br/disciplinas/pc/source/introducao_c_renatocm_deeufmg.pdf

Mais eu aprendi brincando com ele, tentando fazer códigos python funcionar nele...

Still in development...



3. Re: Livro de C

Patrick Sasso
pksasso

(usa Ubuntu)

Enviado em 06/04/2018 - 18:18h

Eu recomendo o livro "Como programar em C" dos Deitel, é um livro pago, mas é possível achar pdf na internet, quando começar a trabalhar com certeza vou comprar o físico, mas pra aprender tive que apelar pro pdf mesmo.


4. Re: Livro de C

Cabreuvas
Cabreuvas

(usa Manjaro Linux)

Enviado em 06/04/2018 - 18:52h

Eu tenho uma noção básica de C, nada avançado, fiz uns exercícios bem simples. Vou far uma olhada em todas as apostilas recomendadas.

Mas tem uma coisa que eu queria saber e nunca achei na internet: por que, no final de uma função, se coloca o return? Para informar caso a função não seja concluída corretamente?

Eu queria um livro mais para consulta de comandos e opções.

Ah, e DarwinUser: sim, estou de boa na lagoa com o Gentoo.

* Como você não tinha o GCC? Usa outro compilador?


5. Re: Livro de C

Hugo Cerqueira
hrcerq

(usa Outra)

Enviado em 06/04/2018 - 19:06h

Pessoal,

Sem querer ser chato, mas já sendo, gostaria de lembrar que os termos de uso do Viva o Linux repudiam a pirataria, e isso se aplica também a documentos cuja cópia/redistribuição não está expressamente autorizada.

https://www.vivaolinux.com.br/termos-de-uso/

Claro que isso não impede que os livros sejam recomendados, porém a redistribuição do material (em PDF ou outros formatos) não necessariamente é permitida. Então, por favor, verifiquem os materiais que estão referenciando.

Aproveito para deixar também uma recomendação de livro de C: "An Introduction to the C Programming Language
and Software Design", de Tim Bailey. Simples, direto, organizado e didático, e baseado em excelentes referências, como o próprio "The C Programming Language", de Brian Kernighan e Dennis Ritchie. O livro (PDF) está disponível gratuitamente, no site:

http://www-personal.acfr.usyd.edu.au/tbailey/ctext/

---

Atenciosamente,
Hugo Cerqueira


6. Re: Livro de C

Hugo Cerqueira
hrcerq

(usa Outra)

Enviado em 06/04/2018 - 19:17h

Cabreuvas escreveu:

Mas tem uma coisa que eu queria saber e nunca achei na internet: por que, no final de uma função, se coloca o return? Para informar caso a função não seja concluída corretamente?


Uma função pode ser entendida como um sistema aberto: tem entrada (input), processamento e saída (output). Ou seja, você fornece algo para ela, ela processa esse algo e devolve um resultado pra você.

O comando return serve para que a função possa fornecer algum resultado do processamento que ela fez. Porém uma função não necessariamente é desenhada para fornecer um retorno. As funções do tipo void não retornam nada.

Da mesma forma, uma função não necessariamente precisa de input, isto é, existem funções que não recebem parâmetros. As funções podem, inclusive não ter nem input nem output, apenas o processamento. Fica a critério do programador decidir quando uma função deve ou não deve oferecer um retorno.

Mas uma vez que a função foi criada com o propósito de retornar algo (isto é, se não for do tipo void), ela necessariamente terá que ter o comando return (a única exceção a esta regra é a função main, que terá esse comando implicitamente como seu último comando, caso não seja declarado explicitamente no corpo da função).

---

Atenciosamente,
Hugo Cerqueira


7. Re: Livro de C

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/04/2018 - 19:29h

Cabreuvas escreveu:

Eu tenho uma noção básica de C, nada avançado, fiz uns exercícios bem simples. Vou far uma olhada em todas as apostilas recomendadas.

Mas tem uma coisa que eu queria saber e nunca achei na internet: por que, no final de uma função, se coloca o return? Para informar caso a função não seja concluída corretamente?

Eu queria um livro mais para consulta de comandos e opções.

Ah, e DarwinUser: sim, estou de boa na lagoa com o Gentoo.

* Como você não tinha o GCC? Usa outro compilador?


O GCC era o 4.9, precisava atualizar(estou usando o 7.3.0 agora), e as vezes, eu prefiro usar o clang(não no portage)... hehehe
https://wiki.gentoo.org/wiki/Clang
Ele e melhor mostrando erros, pelo menos eu acho...

/dev/disk0s1 is mounted.



8. Re: Livro de C

Cabreuvas
Cabreuvas

(usa Manjaro Linux)

Enviado em 06/04/2018 - 19:33h

Eu estava pesquisando, e eu acho que entendi: se eu colocar uma função como void, ela não vai retornar um valor utilizável por outra função, vai ficar isolada, é isso?



9. Re: Livro de C

Hugo Cerqueira
hrcerq

(usa Outra)

Enviado em 06/04/2018 - 19:52h

Cabreuvas escreveu:

Eu estava pesquisando, e eu acho que entendi: se eu colocar uma função como void, ela não vai retornar um valor utilizável por outra função, vai ficar isolada, é isso?


Quase isso, uma função do tipo void não tem retorno, ela apenas realiza algum procedimento, que podem ser várias coisas, como exibir algo na tela ou alterar o valor de uma variável global, estática ou passada como parâmetro por ponteiro (nesse exemplo, uma variável local não faria muito sentido pois ela seria eliminada no final da função de qualquer jeito).

O único ponto de atenção nesse caso é dizer que ela fica isolada, pois alguma interação ela acaba tendo com o resto programa. Se ela altera o valor de uma variável, por exemplo, então os efeitos do processamento realizado pela função serão percebidos em outra parte do programa, onde essa variável for usada no futuro.

---

Atenciosamente,
Hugo Cerqueira


10. Re: Livro de C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/04/2018 - 20:40h



Além de ser uma indicação de livro pirata, o C Completo e Total (tradução do C: The Complete Reference) é tão cheio de erros que virou um meme entre os programadores C, com direito a website próprio e tudo. Evite esse livro.
Se quiser saber algumas razões, veja https://www.seebs.net/c/c_tcn3e.html.



Não conhecia. Olhando, vi erros e imprecisões já no capítulo 1, que se espalham por todo o resto do material (até o capítulo 9, onde parei de olhar). Outro a ser evitado.

Em particular, ele ensina sobre lvalues e rvalues do mesmo jeito errado como eu fui ensinado pelo C Completo e Total, o que me atrapalhou desde 1989 (quando comecei a aprender C) até bem recentemente (2014? — não lembro ao certo), quando, nesta comunidade do VoL, o EnzoFerber finalmente me fez ver esse erro de mais de duas décadas.



Aparentemente o mesmo material que o anterior. Logo, com os mesmos erros. Evite.



Eu sou meio chato. Quando um curso já começa ensinando a declarar a função main() em desacordo com o padrão (“int main()”, com os parênteses vazios, violando as prescrições da seção 5.1.2.2.1 do padrão do C) e ensinando a fazer bacalhau logo no primeiro programa de exemplo (a chamada a getchar()), eu já recomendo logo que evite.



Mais um que eu não recomendo, já que o autor começa a meter coisas específicas de MS-DOS lá pelo meio do texto, recomenda o uso da função obsoleta (e que nunca deveria ter existido!) gets(), e a coisa vai piorando dali para frente.


Para não encerrar esta mensagem apenas falando mal, dos livros de C que eu conheço, eu recomendo a segunda edição de The C Programming Language, de Brian Kernighan e Dennis Ritchie (este último é ninguém menos que o criador da linguagem). Ele talvez esteja um pouco antigo, pois se refere ao padrão de 1989 (já houve atualizações importantes nos padrões de 1999 e 2011), mas (quase) tudo o que vai ali ainda e plenamente válido. Outras pessoas podem dar sugestões sobre livros mais modernos.

Mas outra sugestão que eu faço é que, se você está começando, aprenda C++ em vez de C. E, nesse caso, eu recomendo os livros do Bjarne Stroustrup.


11. Re: Livro de C

Leonardo
Valeyard

(usa Void Linux)

Enviado em 09/07/2018 - 10:31h

DarwinUser escreveu:

... e ensinando a fazer bacalhau logo no primeiro programa de exemplo (a chamada a getchar()), eu já recomendo logo que evite.



Poderia explicar essa parte do getchar()? É ruim usar essa função?


12. Re: Livro de C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/07/2018 - 13:21h

Não é ruim usar essa função. É ruim usá-la do modo como ele a usou.

Ele até dá uma explicação, mas tal explicação não é boa. Eis o que ele diz a respeito.

The next command is getchar(). This is another function call: it reads in a single character and waits for the user to hit enter before reading the character. This line is included because many compiler environments will open a new console window, run the program, and then close the window before you can see the output. This command keeps that window from closing because the program is not done yet because it waits for you to hit enter. Including that line gives you time to see the program run.


O pedaço que diz “it reads in a single character and waits for the user to hit enter before reading the character” é incorreto, pois não é isso o que a função efetivamente faz. Do ponto de vista do C, não existem teclas, nem Enter, nem teclado, nem terminal, e possivelmente nem mesmo usuário (no sentido dado pelo autor do texto). Para o C, o que existe é um fluxo de dados, na forma de uma cadeia de bytes. Como esses bytes chegaram nesse fluxo não diz respeito ao programa em C, mas sim ao ambiente de execução. A espera pela quebra de linha, venha ela da tecla Enter ou de algum outro modo, também não é atribuição do programa C, da biblioteca de entrada e saída que ele usa ou de como a biblioteca lida com buffers, mas também do ambiente de execução (no caso dos nossos PCs UNIX/Linux ou Windows, o sistema operacional implementa buffers no nível do dispositivo associado ao terminal, seja ele físico ou virtual; a espera pela quebra de linha, se houver, é resolvida em nível de S.O., não de biblioteca de I/O, e muito menos em nível de linguagem).

É legítima a preocupação com características do ambiente de execução. É quase inevitável que o aluno vai tentar seus exemplos e exercícios num computador real, e a possibilidade de que um programa que executa tão rapidamente numa janela à parte que se feche antes de o resultado poder ser visto, às vezes em menos de um décimo de segundo, pode ser bastante frustrante. Mas esse cuidado pode ser tomado de uma maneira que não apresente ao aluno informações incorretas, nem o leve a poluir o código em C com artefatos de código supostamente engenhosos para contornar comportamentos do ambiente de execução — até porque cada ambiente de execução se comporta de maneira possivelmente distinta de outros ambientes, e os artefatos voltados para um tipo de ambiente podem produzir efeitos deletérios em outro ambiente.

Uma abordagem melhor possivelmente seria explicar que a interface padrão do C é através de comunicação por texto, como tal comunicação por texto se dá num computador real através de um terminal físico ou virtual, e orientar o aluno a como executar o código compilado a partir de um terminal previamente alocado ou dar orientações gerais para configurar um ambiente de desenvolvimento integrado em modo gráfico para que dispare o emulador de terminais de um modo que ele não se feche automaticamente quando o programa que executar dentro terminar. Seriam instruções pouco específicas, mas pelo menos não seriam errôneas.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts