gboolean определён как gint, FALSE как 0, TRUE как !FALSE. Так что во всей этой простыне нет смысла. Разве что кодинг стайл им запрещает писать !!hide_label.
Технически да, так как это просто тайпдеф на int. А int (традиционно) может иметь 2^32 значений.
Однако в сишке логика такова, что все что не 0 есть TRUE. Т.е. нет разницы что там когда оно не ноль.
Разве что кодинг стайл им запрещает писать !!hide_label.
Я тоже так подумал. Может аргументируют так
// what is hide_label? a boolean? a function name/address? a pointer?
some_func(hide_label);
// obvious: hide_label is a logical expression (boolean)
some_func(hide_label ? TRUE : FALSE);
Однако, с моей точки зрения это уже наркомания. Плюс еще можно попутать местами значения TRUE FALSE в тернарке и никакого варнинга не будет.
$ cat t.cpp
#include <stdio.h>
int main(void)
{
int i = 1343;
int j = !!i;
::printf("i: %d, j: %d\n", i, j);
return 0;
}
$ make t
c++ t.cpp -o t
$ ./t
i: 1343, j: 1
В честь субботы я почитаю тебе с выражением вслух, так и быть:
например, поскольку true - это не «1», а «не 0», то по стандарту можно хоть 10 на выходе операции "!" получить или я не прав?
Раздел 6.5.3.3, пункт 5. «The result of the logical negation operator ! is 0 if the value of its operand compares
unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int. The expression !E is equivalent to (0==E).»
Стандарт C11:
6.5.3.3 Unary arithmetic operators
The result of the logical negation operator ! is 0 if the value of its operand compares
unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.
The expression !E is equivalent to (0==E).
Результат оператора логического отрицания ! равен 0 если значение операнда не равно 0, 1 если значение операнда равно 0. Результат имеет тип int. Выражение !E эквивалентно выражению (0 == E).
На тебе из C++:
The operand of the logical negation operator ! is contextually converted to bool (Clause 4); its value is
true if the converted operand is false and false otherwise. The type of the result is bool.
И:
If the source type is bool, the value false is converted to zero and
the value true is converted to one.