Здравствуйте kostaLom, Вы писали:
L>Код, написанный на Microsoft Visual C++:
L>// ...
L>typedef struct cvar_s
L>{
L> char *name;
L> char *string;
L> char *latched_string;
L> int flags;
L> boolean modified;
L> float value;
L> struct cvar_s *next;
L>} cvar_t;
L>// ...
L>cvar_t *cl_dedicated;
L>// ...
L>// Что означает это выражение? Что вычисляется в нем?
L> if (dedicated && dedicated->value) // "А"
Проверить, не равен ли нулевому указателю указатель dedicated. Если нет, продолжить вычисление логического выражения.
Проверить, не равен ли нулевому указателю dedicated->value. Если нет, войти в тело оператора if.
L>/*
L>Является ли выражение "Б" равноценным "А"?
L> if (dedicated->value == 0) // "Б"
Нет. Если dedicated == NULL, то обращение к члену объекты, заданного через нулевой указатель, приведет к EXCEPTION_ACCESS_VIOLATION. Нельзя обращаться к члену чего-то, чего на самом деле нет.
L>А то Borland C++ 5.02 ругается на "invalid operation with float point"
L>А вот выражение:
L> if(minimized)
L>Это тоже самое ли?
L> if(minimized == TRUE)
L>*/
Нет. Это то же самое, что minimized != 0.0 или minimized != 0 (в предположении, что объявление minimized следующее:
double minimized;
С уважением