Um meine Kommentare zu erweitern, ist der Text dieses Buches unklar, was das Problem verschleiert.
Wie ich kommentierte, versucht dieses Buch zu sagen: "Lassen Sie uns eine unendliche Anzahl von Affen dazu bringen, jede denkbare C ++ - Funktion zu schreiben, die jemals geschrieben werden könnte. Es wird Fälle geben, in denen wir eine Variable auswählen, die (eine bestimmte Funktion, die die Affen geschrieben haben) verwendet, können wir nicht herausfinden, ob die Funktion diese Variable ändern wird. "
Natürlich kann dies für einige (sogar viele) Funktionen in einer bestimmten Anwendung vom Compiler sehr einfach bestimmt werden. Aber nicht für alle (oder unbedingt für die meisten).
Diese Funktion kann einfach so analysiert werden:
static int global;
void foo()
{
}
"foo" ändert "global" eindeutig nicht. Es ändert überhaupt nichts, und ein Compiler kann dies sehr einfach herausfinden.
Diese Funktion kann nicht so analysiert werden:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
Da die Aktionen von "foo" von einem Wert abhängen, der sich zur Laufzeit ändern kann , kann zur Kompilierungszeit offenbar nicht festgestellt werden , ob "global" geändert wird.
Dieses ganze Konzept ist viel einfacher zu verstehen, als es Informatiker vermuten. Wenn die Funktion etwas anderes tun kann, basierend darauf, dass sich die Dinge zur Laufzeit ändern können, können Sie nicht herausfinden, was sie tun wird, bis sie ausgeführt wird, und jedes Mal, wenn sie ausgeführt wird, kann sie etwas anderes tun. Ob es nachweislich unmöglich ist oder nicht, es ist offensichtlich unmöglich.