Прежде всего, я хотел бы отметить, что крайний левый тип для типа X
не является необходимым, так что вы можете упростить его до:
#define GET_MEMBER(X, Y, Z) (*((X*)(((int*)(Y))+Z)))
Тем не менее, я не вижу цели использования такого макроса. Он отбрасывает безопасность типов, а синтаксис громоздок.
Код, который генерирует компилятор для двух разных способов, должен быть очень похожим, если не идентичным. Но на каком компиляторе и платформе должна быть скомпилирована эта библиотека? Если при использовании GET_MEMBER
в этом компиляторе произошло увеличение производительности, возможно, именно поэтому они его и используют.
РЕДАКТИРОВАТЬ 1: Я предполагаю, что первоначальный автор библиотеки не знал о структурах и изобрел свою собственную вещь, похожую на структуры, используя alloc, указатели и макросы. Теперь, когда он сделал библиотеку открытым исходным кодом, другие пытаются преобразовать ее, чтобы использовать структуры, но есть много кода для преобразования, и они еще не закончили.