2011-06-13 19 views
11

Al usar JNI para la interfaz entre Java y C, javah analiza un valor booleano en Java en jBoolean en el archivo de encabezado JNI. Cuando uso bool en el archivo C, el compilador de Visual Studio lanza una advertencia de queTeclee una variable de jBoolean a bool

advertencia C4800: 'jboolean': forzando valor a bool 'verdadero' o (advertencia de rendimiento) 'falso'

¿Hay algún otro tipo de datos que deba usarse? O si el bool es el único tipo de datos aquí, ¿cuáles son exactamente los problemas de rendimiento que podría enfrentar?

Respuesta

10

El "problema de rendimiento" es que el reparto no es completamente gratis. Casting a bool significa esencialmente forzar todos los valores distintos de cero a 1, lo que requiere un poco de código, en lugar de un molde "libre" como ensanchar char a int. El "problema de rendimiento" es unas pocas instrucciones adicionales de la máquina. Si estás haciendo esto un millón de veces en un círculo cerrado, está bien, quizás te importe; de ​​lo contrario, no, no deberías preocuparte en absoluto. Esta es una advertencia tonta del compilador; ese pequeño costo adicional es simplemente parte del compromiso que usted hace al usar bool y el compilador no debería molestarlo al respecto.

3

Prueba a lanzar a BOOL en su lugar. Puede encontrar este hilo interesante también: Difference between bool and BOOL.

No estoy del todo seguro de que esto sea lo que está buscando. BOOL es 16 bits, no 8 bits. Si eso está bien, entonces está más cerca de lo que estás buscando que bool. De lo contrario, podrías usar byte. Tenga en cuenta que si finaliza la conversión a cualquiera de estos, ya no podrá hacer == verdadero. Esto también se explica en el enlace que proporcioné.