У меня есть функция, которая берет два массива и записывает в третий массив результат функции pure
(c_i = a_i / b_i):
inline
void array_division (ptrdiff_t nmemb,
double dest[static nmemb],
const double src1[static nmemb],
const double src2[static nmemb])
__attribute__((nonnull, pure));
inline
void array_division (ptrdiff_t nmemb,
double dest[static nmemb],
const double src1[static nmemb],
const double src2[static nmemb])
{
for (ptrdiff_t i = 0; i < nmemb; i++)
dest[i] = src1[i] / src2[i];
}
GCC выдает ошибку, потому что это нене следует ожидать, что чистая функция вернет void
.
A чистая функция - это функция, которая действует как функция своих параметров и значений, на которые указывают эти параметры;и если ни один из параметров, ни значения, на которые они указывают, не изменяются между двумя вызовами, они должны быть избыточными, и вызов может быть опущен, что соответствует тому же значению, которое было возвращено предыдущим вызовом.
Моя функцияследует всем этим правилам: если ни один из трех массивов не изменяется между двумя вызовами функций, вызов функции может быть полностью удален;и они оценивают одно и то же значение (которого нет, потому что оно void
).
Прав ли я, полагая, что GCC должен разрешить такое использование __attibute__((pure))
?
Должен ли я вернутьсяфиктивная return 0;
, чтобы избежать жалоб GCC?
РЕДАКТИРОВАТЬ:
Состояние ошибки в GCC: __ атрибут __ ((чистый)) для работы с неконстантные указатели