K & R C Programming Language 1.5.1 (Cópia de Arquivos)

Bem, eu li há alguns meses um outro livro "bem conhecido" em C (na minha língua), e nunca aprendi nada sobre isso. A forma como K & R escreve 3 capítulos em 20 páginas é simplesmente incrível, e é claro que não posso esperar grandes explicações, mas isso também levanta questões.

Eu tenho uma pergunta sobre este ponto 1.5.1 O livro diz (pag 16):

main(){
  int c;// <-- Here is the question
  c=getchar();
  while (c != EOF){
    putchar(c);
    c = getchar();
  }
}

[...] O tipo char é especificamente destinado a armazenar tais dados de caractere, mas qualquer tipo inteiro pode ser usado. Usamos int por uma razão sutil, mas importante. O problema é distinguir o fim da entrada dos dados válidos. A solução é que getchar retorna um valor distinto quando não há mais entrada, um valor que não pode ser cifrado com qualquer caractere real. Este valor é chamado EOF, para "fim do arquivo". Devemos declarar c como um tipo grande para manter qualquer valor que retorne getchar. Não podemos usar char, já que c deve ser grande o suficiente para conter EOF além de qualquer caractere possível. Por isso usamos int [...]

Depois de pesquisar no Google por outra explicação:

EOF é uma macro especial que representa End Of File (Linux: use CTRL + d no teclado para criar este, comando do Windows: use CTRL + z (pode ter que estar no início da nova linha, seguido por RETURN)): Frequentemente EOF = -1, mas dependente da implementação. Deve ser um valor que não seja válido para qualquer caractere possível. Por essa razão, c é do tipo int (não é o que se pode esperar).

Então eu modifiquei a fonte de int para char para ver qual é o problema, sobre valores de EOF ... mas não há problema. Funciona da mesma maneira.

Eu também não entendi como getchar pega todos os caracteres que eu escrevo e imprime tudo. O tipo Int é de 4 bytes, portanto, pode levar 4 caracteres dentro de uma variável. Mas eu posso colocar qualquer número de caracteres, ele vai ler e escrever tudo da mesma maneira. E com char, acontece o mesmo ... O que realmente acontece? Onde estão os valores armazenados quando há mais de 1-4 caracteres?

questionAnswers(3)

yourAnswerToTheQuestion