В чем преимущество (если есть), использовать typedef
вместо #define
в коде C?Зачем использовать C typedefs вместо #defines?
В качестве примера, есть ли преимущество использования
typedef unsigned char UBYTE
над
#define UBYTE unsigned char
когда оба могут быть использованы в качестве
void func()
{
UBYTE byte_value = 0;
/* Do some stuff */
return byte_value;
}
Очевидно, что препроцессор будет пытаться разверните a #define
везде, где он видит один, чего не было бы с typedef
, но это не кажется мне конкретным преимуществом или недостатком; Я не могу придумать ситуацию, когда либо использование не приведет к ошибке сборки, если возникла проблема.
Quot the preprocessor: «Злоупотребление мной, злоупотребляйте мной .. Заставьте меня почувствовать желание!» +1 –
Я делаю препроцессор злоупотребления справедливым битом, но не для типов, если нет другого пути. (Мне понадобилось это * один раз * за последние 20 лет при написании кода для кросс-платформенной 64-битной целочисленной обработки. Это было удивительно сложно для компиляторов, доступных в то время, и в итоге появилось больше #ifdefs, чем у меня было бы предпочтительнее.) –
Также используются типы указателей функций ... – hugomg