Скажем, у меня есть функция, которая принимает 2 не псевдонима int*
и копирует один int
в другой, а затем возвращает int*
, который служил в качестве пункта назначения. Например:
int* copy_int(int* restrict dest, int const* restrict src) {
*dest = *src;
return dest;
}
Является ли какой-либо из следующих кодов вызова неопределенным поведением?
void caller(void) {
int dest;
int src = 42;
copy_int(&dest, &src); // ignored return value aliases &dest
}
void caller(void) {
int dest;
int src = 42;
int* dest_addr = copy_int(&dest, &src); // dest_addr aliases &dest
}
void caller(void) {
int dest;
int src = 42;
int* dest_addr = &dest;
int* dest_addr_2 = copy_int(&dest, &src); // dest_addr_2 aliases dest_addr
}
Или я могу с уверенностью предположить, что restrict
применяется только внутри вызываемый, и что я могу псевдоним этих указателей за пределами вызова функции?