Во-первых, это #define
неверно из-за точки с запятой в конце, и компилятор будет ошибаться при:
float f = CRANDOM() * 2;
Во-вторых, я лично стараюсь избегать использования препроцессора, кроме разделения независящих от платформы разделов в кроссплатформенном коде и, конечно, кода, зарезервированного исключительно для сборок DEBUG или не-DEBUG.
Nightcracker правильно заявляет, что он всегда будет «эффективно» встроенным, но, учитывая, что вы можете переписать функцию так, чтобы она была inline
, я не вижу никакого преимущества в использовании версии препроцессора , если C- рассматриваемый компилятор не встроен.