Просмотр среди некоторых унаследованного кода я нашел такую функцию:Зачем использовать 'function address == NULL' вместо 'false'?
static inline bool EmptyFunc()
{
return (void*) EmptyFunc == NULL;
}
Какие отличия от этого:
static inline bool EmptyFunc()
{
return false;
}
Этот код был создан для компиляции под несколькими различными платформами, как PS2, Wii, PC ... Есть ли какая-то причина для использования первой функции? Как лучше оптимизировать или избежать какого-то странного неправильного поведения компилятора?
Я думаю, что это потому, что если вы только что вернули «ложь», компилятор мог бы свободно оптимизировать эту функцию ... но тогда в любом месте, которое на самом деле использовало его, следует предотвратить такую же оптимизацию. Хм. Где используется 'EmptyFunc'? Кроме того, почему приведение в 'void *'? Это не имеет смысла для указателей на функции ... – Cameron
Просто догадайтесь, но похоже, что они пытаются заставить компилятор генерировать нестрочную версию функции. Это может произойти, когда вы берете указатель на функцию. –
'EmptyFunc' использовался как обратный вызов в процедуре регистрации пользовательских входных данных, которая проходила бы каждый зарегистрированный обратный вызов и отмечала бы соответствующее событие как вызванное, когда данный обратный вызов возвращает true. –