Поясните код

iStrannik
Дата: 19.08.2014 11:52:51
Разбираюсь с одним SDK на C++ (сам программирую на Delphi) поэтому прошу помощи разъясните
как работает этот код:

Объявлен тип:
#ifndef _UINTPTR_T_DEFINED
#ifdef  _WIN64
typedef unsigned __int64    uintptr_t;
#else
typedef _W64 unsigned int  uintptr_t;
#endif
#define _UINTPTR_T_DEFINED
#endif


    /** \brief Camera handle type */
    typedef uintptr_t camera_t;


Объявление переменной
camera_t cam;


Потом в примере я вижу такой вызов
BAD_HANDLE(cam, "couldn't create camera", cam, 0)


где BAD_HANDLE:

#define BAD_HANDLE(h, msg, cam, grabber)     \
	if((h) == IVP_E_INVALID_HANDLE) {        \
		printf("FAILURE <<< %s >>>\n", msg); \
		close_down(-1, (cam), (grabber));    \
	}

где IVP_E_INVALID_HANDLE объявлена как
#define IVP_E_INVALID_HANDLE   -1


Вот я не могу понять h - беззнаковая, а сравнение в условии с IVP_E_INVALID_HANDLE = -1 как такое может быть
и что означает h - в круглых скобках?
Dimitry Sibiryakov
Дата: 19.08.2014 12:09:42

iStrannik
Вот я не могу понять h - беззнаковая, а сравнение в условии с
IVP_E_INVALID_HANDLE = -1 как такое может быть и что означает h - в круглых скобках?

При сравнении один тип будет приведён к другому, так что это просто 64 бита. Создатель
говногода не заботился о предупреждениях компилятора.

Круглые скобки там на случай, если в этот макрос будут передавать выражение.

Posted via ActualForum NNTP Server 1.5