Блог C2ArchitectorФорум

Основной путь в if, ошибки в else. (комментарии)

#0
9:45, 27 июня 2008

Основной путь в if, ошибки в else. (комментарии)

Это сообщение сгенерировано автоматически.

#1
9:45, 27 июня 2008

>// Макрос для определения длинны массива
>#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", и код генерируют соответственно.
Штрафы по времени исполнения за неверное предсказание перехода будут стоить дорого.

#2
13:31, 27 июня 2008

aruslan
Не, я на С пишу. Да и вообще-то проблемы такой не было с размером массива. Конструкцию с шаблонами не понял. Не понял даже шаблонная строчка отдельно или это шаблон прямо к дефайну и что она определяет, на функцию не похоже.

Блог C2ArchitectorФорум

Тема в архиве.