Основной путь в if, ошибки в else. (комментарии)
Это сообщение сгенерировано автоматически.
>// Макрос для определения длинны массива
>#define ARRAY_length(x) sizeof(x) / sizeof(x[0])
>Советует использовать этот макрос прямо в цикле. Не понятно сможет ли компилятор заменить это на константу и работает ли это с динамическими массивами.
Это будет работать с VLA, но не будет работать с массивами выделенными по new/malloc.
Если пишешь на C++, то лучше хоть как-то защититься от дебильных ошибок связанных с использованием указателей вместо массивов:
template <class T, std::size_t N> char (&array_sizer(T (&)[N]))[N]; #define ARRAY_LENGTH(array) (sizeof ::array_sizer(array))
Ну или полностью перейти на шаблонную версию.
> Интересный совет размещать главнее основные пути алгоритма. Например в условном операторе первым условием должен быть успех:
Совет дельный, поскольку большинство компиляторов предполагают, что ветвь "then" будет исполняться сильно чаще чем "else", и код генерируют соответственно.
Штрафы по времени исполнения за неверное предсказание перехода будут стоить дорого.
aruslan
Не, я на С пишу. Да и вообще-то проблемы такой не было с размером массива. Конструкцию с шаблонами не понял. Не понял даже шаблонная строчка отдельно или это шаблон прямо к дефайну и что она определяет, на функцию не похоже.
Тема в архиве.