paulo1205
(usa Ubuntu)
Enviado em 27/08/2015 - 13:50h
Eu não tinha visto sua mensagem. Vi somente agora.
Se você não se importar, eu prefiro conversar publicamente.
Pegando carona num exemplo mencionado na mensagem particular, mas me atendo ao tema sugerido pelo título: "C puro" foi pensado para o "computador puro". Um computador puro é uma máquina de computar, não de interagir.
Tela, teclado, impressora, texto, gráficos, cores, ou mesmo discos, fitas e interfaces de rede, nada disso é parte necessária de uma máquina de realizar computações. E o C, em estado puro, é pensado para essa máquina computadora essencial, que possui uma memória, onde residem dados, e opera sobre esses dados, colocando também os resultados em memória.
Necessariamente, uma máquina que faz mais do que isso, por possuir outros dispositivos além de memória, não usará "C puro" porque, mesmo que use apenas C para acesso a tais dispositivos, o fará por meio de um programa que não se comportará de modo idêntico em outra máquina.
Deixe-me dar um exemplo. A memória de vídeo em modo de texto do PC ficava ali pela faixa de memória física de 0Xb8000. Você poderia obter acesso a essa memória fazendo algo mais ou menos assim.
struct text_cell {
uint8_t attribute; // Cor, cor de fundo, piscante etc.
char character; // Caráter desenhado na tela.
};
struct text_cell *screen;
screen=(struct text_cell *)0xb8000;
/* Coloca um "P" azul piscante em fundo vermelho na 11ª coluna da 1ª linha */
screen[10].attribute=BLUE_FOREGROUND|RED_BACKGROUND|BLINK;
screen[10].character='P';
Tudo acima está expresso em C (não há, por exemplo, nada que recorra a Assembly). Mas isso é "C puro"?
Não é, pois não vai rodar direito num "computador puro". O código acima é C aplicado a uma arquitetura específica, em condições específicas: um PC rodando em modo texto, sem um sistema operacional que controle o acesso direto à memória (isso provavelmente não rodaria diretamente num Windows 64, nm num Linux; mas era comum no tempo do MS-DOS).