Если я сохраняю указатель на функцию, а затем в какой-то более поздний момент во время выполнения моей программы сравниваю его с адресом той же функции, оба гарантированных адреса будут равны.
например.
int foo(void){return 0;}
int (*foo_p)(void) = &foo;
assert(foo_p == &foo);
В приведенном выше коде утверждается, что утверждение всегда гарантировано? Существуют ли какие-либо обстоятельства, при которых может измениться адрес функции?