c - sistemas - sistema operativo linux
¿Qué significa !!(x) en C(especialmente el kernel de Linux)? (3)
No es tanto una sintaxis de lenguaje sino una abreviatura común para convertir un char o int en cuasi-booleano.
En C operaciones lógicas como == &&! y así sucesivamente puede actuar en int, char, etc., ya que no existe un tipo booleano, sin embargo, según el estándar, se garantiza que devolverán 0 para False y 1 para verdadero.
Entonces, por ejemplo, si tiene
int x = 5;
puede obligarlo a convertir a un tipo "booleano" (no hay ningún tipo booleano en C, por lo tanto, las comillas) lo hace
x = !x; /* !5 which gives 0 always */
x = !x; /* which gives 1 always */
!!(x)
es equivalente a (x) != 0
(a menos que ocurra una sobrecarga de operador muy extraña en C ++).
El hecho de que no sea obvio lo que está haciendo !!(x)
es probablemente una buena razón para usar (x) != 0
. A menos que quieras ser un hacker de kernel de élite.
Vea esta pregunta cerrada (si todavía está disponible) para una discusión sobre los méritos de !!
(Tal vez esa pregunta será reabierta, ya que esta pregunta indica que tiene algún valor).
!!(x)
fuerza a ser 0 o 1. 0 sigue siendo 0, pero cualquier valor distinto de cero (que sería ''verdadero'' en un contexto booleano) se convierte en 1.