Muitas boas respostas, mas permitam-me acrescentar outra e enfatizar que, em um computador determinístico, nada é aleatório. Isso ocorre tanto para os números produzidos por um pseudo-RNG quanto para os números aparentemente "aleatórios" encontrados em áreas da memória reservadas para variáveis locais C / C ++ na pilha.
MAS ... há uma diferença crucial.
Os números gerados por um bom gerador de pseudoaleatórios têm propriedades que os tornam estatisticamente semelhantes aos empates verdadeiramente aleatórios. Por exemplo, a distribuição é uniforme. A duração do ciclo é longa: você pode obter milhões de números aleatórios antes que o ciclo se repita. A sequência não está correlacionada automaticamente: por exemplo, você não começará a ver padrões estranhos surgirem se você pegar cada segundo, terceiro ou 27º número ou se observar dígitos específicos nos números gerados.
Por outro lado, os números "aleatórios" deixados na pilha não possuem nenhuma dessas propriedades. Seus valores e sua aparente aleatoriedade dependem inteiramente de como o programa é construído, como é compilado e como é otimizado pelo compilador. A título de exemplo, aqui está uma variação da sua ideia como um programa independente:
#include <stdio.h>
notrandom()
{
int r, g, b;
printf("R=%d, G=%d, B=%d", r&255, g&255, b&255);
}
int main(int argc, char *argv[])
{
int i;
for (i = 0; i < 10; i++)
{
notrandom();
printf("\n");
}
return 0;
}
Quando eu compilo esse código com o GCC em uma máquina Linux e o executo, ele se mostra bastante desagradável:
R=0, G=19, B=0
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
Se você analisasse o código compilado com um desmontador, poderia reconstruir o que estava acontecendo, em detalhes. A primeira chamada para notrandom () usou uma área da pilha que não era usada por este programa anteriormente; quem sabe o que estava lá. Mas depois dessa chamada para notrandom (), há uma chamada para printf () (que o compilador GCC realmente otimiza para uma chamada para putchar (), mas não importa) e que substitui a pilha. Portanto, nos próximos momentos seguintes e subsequentes, quando notrandom () for chamado, a pilha conterá dados obsoletos da execução de putchar () e, como putchar () sempre é chamado com os mesmos argumentos, esses dados obsoletos sempre serão os mesmos, também.
Portanto, não há absolutamente nada aleatório nesse comportamento, nem os números obtidos dessa maneira têm nenhuma das propriedades desejáveis de um gerador de números pseudoaleatórios bem escrito. De fato, na maioria dos cenários da vida real, seus valores serão repetitivos e altamente correlacionados.
De fato, como outros, eu também consideraria seriamente demitir alguém que tentou passar essa idéia como um "RNG de alto desempenho".