Всех приветствую!
Мне не нравиться библиотека glm из-за своей многословности, сложности и большого кол-ва файлов.
Поэтому я, как программирующий на C естественно, пишу свою библиотеку.
Вопрос 1: Стоит ли делать always_inline для простеньких функций в своей библиотеке, например
...
static inline __attribute__((always_inline)) void vec3_add (VEC3 *v, const VEC3 *u,const VEC3 *w) { v->X = u->X + w->X;
v->Y = u->Y + w->Y;
v->Z = u->Z + w->Z; }
static inline __attribute__((always_inline)) void vec3_sub (VEC3 *v, const VEC3 *u,const VEC3 *w) { v->X = u->X - w->X;
v->Y = u->Y - w->Y;
v->Z = u->Z - w->Z; }
...
или компилятор лучше знает когда и что ему оптимизировать. И сделать их обычными static vec3_add(…)
Если такие ф-ции присутствуют внутри какого-то цикла, который не известно на уровне исполнения когда закончится, то компилятор не даст сделать такие ф-ции встроенными (_inline). Верно?
Вопрос 2: Имеет ли смысл держать еще аналогичные макросы
#define vec3_ADD(v,u,w) { \
(v).X = (u).X + (w).X; \
(v).Y = (u).Y + (w).Y; \
(v).Z = (u).Z + (w).Z; \
}
#define vec3_SUB(v,u,w) { \
(v).X = (u).X - (w).X; \
(v).Y = (u).Y - (w).Y; \
(v).Z = (u).Z - (w).Z; \
}
Они кажутся естественными. Даже иногда не знаешь, что лучше ф-ция или такой аналогичный макрос. Как быть, что выбрать? Или оставить и то, то это (на всякий случай).
Вопрос 3: Или все таки использовать glm, потому что..1).. 2)..3)?
Интересуют мысли по существу и про по такие вещи вообще.
Спасибо!