Функции Windows SDK Функция IsEqualGUID () и operator==()
для двух идентификаторов GUID, которые возвращают BOOL
(эквивалентно int
):
// Guiddef.h
#ifdef __cplusplus
__inline int IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
{
return !memcmp(&rguid1, &rguid2, sizeof(GUID));
}
#else // ! __cplusplus
#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
#endif
//also in Guiidef.h
#ifdef __cplusplus
__inline int operator==(REFGUID guidOne, REFGUID guidOther)
{
return IsEqualGUID(guidOne,guidOther);
}
#endif
Какой смысл в этомint
?Я понимаю, что C не имеет bool
типа данных, но есть #ifdef __cplusplus
, поэтому этот код будет скомпилирован только как C ++, поэтому bool
будет поддерживаться в любом случае.Наличие отрицания около memcmp()
эффективно преобразует все возможные значения, возвращаемые из memcmp()
в ноль и ненулевое значение.
Также в C нет пользовательских операторов - только C ++ поддерживает их.Так что operator==
не будет компилироваться в коде C. В любом случае
Есть ли причины для выбора int
вместо bool
здесь?