Это безопасно?
foo.h:
struct A {
struct B *b;
// more fields
};
struct B {
// some fields
};
void foo(struct A *restrict a, struct B *restrict b);
foo. c:
void foo(struct A *restrict a, struct B *restrict b)
{
a->b = &b;
}
bar. c:
void bar(void)
{
struct A a;
struct B b;
// some code. a and b are independent here.
foo(&a, &b);
// some more code. Now a and b aren't independent anymore.
}
Интересно, может ли компилятор неверно предположить из объявления функции, что a
не может использоваться для доступа к b
после foo(&a, &b);
и, следовательно, может оптимизировать вещи, которые не должны.