Как сообщить компилятору, что аргумент функции никогда не будет равен нулю?C++

Программы на C++. Форум разработчиков
Anonymous
Как сообщить компилятору, что аргумент функции никогда не будет равен нулю?

Сообщение Anonymous »

Представьте, что у меня есть такая фиктивная функция C:

Код: Выделить всё

void Dummy(uint64* dest, const size_t count)
{
for (size_t ii = 0; ii < count; ii += 8) {
*dest++ = (uint64)dest;
}
}
Если вы посмотрите, что создает компилятор, первая инструкция проверит, что значение count не равно нулю.

Код: Выделить всё

Dummy(unsigned long*, unsigned long):
cbz     x1, .LBB0_7
...
.LBB0_7:
ret

Есть ли атрибут, который я могу поместить в count, чтобы указать, что это значение гарантированно никогда не будет равным нулю и что это ненужное сравнение можно опустить? Есть ли другой стиль кодирования, который я мог бы использовать?
Изменение цикла for на цикл while и другие формы, похоже, не имеет значения. Компиляторы УМНЫ!
И да, меня волнует эта единственная крошечная инструкция. 😊

Подробнее здесь: https://stackoverflow.com/questions/791 ... er-be-zero

Вернуться в «C++»