Использование логических значений в C - PullRequest
616 голосов
/ 17 декабря 2009

C не имеет встроенных логических типов. Какой лучший способ использовать их в C?

Ответы [ 15 ]

1 голос
/ 18 декабря 2009

@ Томас Мэтьюз: условные выражения считаются истинными, если они ненулевые, но стандарт C требует, чтобы сами логические операторы возвращали либо 0, либо 1.

@ Том: #define TRUE! FALSE - это плохо и совершенно бессмысленно. Если заголовочный файл попадает в скомпилированный код C ++, то это может привести к проблемам:

void foo(bool flag);

...

int flag = TRUE;
foo(flag);

Некоторые компиляторы генерируют предупреждение о преобразовании int => bool. Иногда люди избегают этого, делая:

foo(flag == TRUE);

чтобы заставить выражение быть C ++ bool. Но если вы #define TRUE! FALSE, вы получите:

foo(flag == !0);

, который в итоге выполняет сравнение типа int-to-bool, которое в любом случае может вызвать предупреждение.

0 голосов
/ 28 апреля 2019

Вы можете использовать _Bool, но возвращаемое значение должно быть целым числом (1 для true, 0 для false). Тем не менее, рекомендуется включать и использовать bool, как в C ++, как сказано в этот ответ из daniweb forum , а также этот ответ из этого другого вопроса:

_Bool: логический тип C99. Использование _Bool напрямую рекомендуется только в том случае, если вы поддерживаете устаревший код, который уже определяет макросы для bool, true или false. В противном случае эти макросы стандартизированы в заголовке. Включите этот заголовок, и вы можете использовать bool так же, как и в C ++.

0 голосов
/ 26 июня 2017

Вы можете просто использовать директиву #define следующим образом:

#define TRUE 1
#define FALSE 0
#define NOT(arg) (arg == TRUE)? FALSE : TRUE
typedef int bool;

И использовать следующим образом:

bool isVisible = FALSE;
bool isWorking = TRUE;
isVisible = NOT(isVisible);

и так .. на

0 голосов
/ 17 декабря 2009

Это так:

#define TRUE 1
#define FALSE 0
0 голосов
/ 17 декабря 2009

Вы можете использовать для него символ или другой контейнер с небольшим числом.

Псевдо-код

#define TRUE  1
#define FALSE 0

char bValue = TRUE;
...