Рассмотрим следующую единицу компиляции:
#include "h.h"
extern struct A* const a;
void externalFunction(void);
int myFunction(void)
{
struct A *p1,*p2;
p1 = a;
externalFunction();
p2 = a;
return p2-p1;
}
Стандарт позволит компилятору предполагать на основе директивы const
, что значение a
не будет изменено какследствие вызова на externalFunction
. Обратите внимание, что не предпринимается никаких усилий, чтобы рассмотреть вопрос о том, могут ли быть преимущества, если учесть, что внешняя функция может изменить a
. Например, на некоторых платформах a
обычно может быть защищен от записи, но внешняя функция (возможно, написанная на другом языке) может отключить защиту от записи, изменить a
и затем снова включить защиту. Будет ли полезно, чтобы реализация учитывала такие возможности, будет зависеть от ряда целей, для которых реализация заявляет, что она подходит, о чем Комитет не может знать, но о каких авторах компиляторов следует.