Я очень рад, что в C, такие вещи, как это плохо код:Как аккуратно избежать C бросает потерять правду
(var_a == var_b) ? TRUE : FALSE
Однако, что это лучший способ справиться с этим:
/* Header stuff */
#define INTERESTING_FLAG 0x80000000
typedef short int BOOL;
void func(BOOL);
/* Code */
int main(int argc, char *argv[])
{
unsigned long int flags = 0x00000000;
... /* Various bits of flag processing */
func(flags & INTERESTING_FLAG); /* func never receives a non-zero value
* as the top bits are cut off when the
* argument is cast down to a short
* int
*/
}
Допустимо ли (для любого приемлемого использования) (flags & FLAG_CONST) ? TRUE : FALSE
?
Я думаю, что проблема здесь '#define BOOL короткий int'. Вы определили так называемый логический тип, но где ненулевые значения преобразуются в него как false. Затем вы действовали так, как будто любое ненулевое значение истинно. Это какая-то непроницаемая абстракция. –
Я действительно не понимаю, что плохого в этом коде, это стандартная функция языка, о которой должен знать любой программист на C. – Skizz
@Skizz: проблема с '(var1 == var2)? TRUE: FALSE: 'вы имеете в виду? Проблема в том, что она лучше выражается как '(var1 == var2)', если TRUE и FALSE имеют разумные значения. –