私のコメントを拡張すると、その本のテキストは不明確であり、それが問題を難読化しています。
私がコメントしたように、その本は次のように言おうとしています。関数がその変数を変更するかどうかはわかりません。」
もちろん、特定のアプリケーションのいくつかの (場合によっては多くの) 関数については、これはコンパイラによって非常に簡単に決定できます。しかし、すべて(または必ずしもほとんど)ではありません。
この関数は、次のように簡単に分析できます。
static int global;
void foo()
{
}
「foo」は明らかに「global」を変更しません。何も変更しません。コンパイラはこれを非常に簡単に解決できます。
この関数はそのように分析できません:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
「foo」のアクションは実行時に変化する可能性のある値に依存するため、「グローバル」を変更するかどうかをコンパイル時に決定することは明らかにできません。
この概念全体は、コンピューター科学者が理解するよりもはるかに簡単に理解できます。関数が実行時に変化する可能性があることに基づいて別のことを実行できる場合、実行するまでその関数が何をするかを判断できず、実行するたびに別のことを実行する可能性があります。証明不可能か否かにかかわらず、明らかに不可能です。