2011-06-13 1 views
11

Lors de l'utilisation de JNI pour l'interface entre Java et C, javah analyse une valeur booléenne en Java à jBoolean dans le fichier d'en-tête JNI. Lorsque j'utilise bool dans le fichier C, le compilateur Visual Studio lance un avertissement queType de conversion d'une variable de jBoolean à bool

avertissement C4800: 'jboolean': forcer la valeur à bool 'vrai' ou 'faux' (avertissement de performance)

Existe-t-il un autre type de données à utiliser? Ou si bool est le seul type de données ici, quels sont exactement les problèmes de performance que je pourrais rencontrer?

Répondre

10

Le "problème de performance" est que la distribution n'est pas complètement libre. Casting à bool signifie essentiellement forçant toutes les valeurs non nulles à 1, ce qui prend un tout petit peu de code, par opposition à une distribution "libre" comme élargissement char à int. Le "problème de performance" est quelques instructions supplémentaires de la machine. Si vous le faites un million de fois dans une boucle serrée, OK, peut-être que vous vous en souciez - sinon, non, vous ne devriez pas du tout. C'est IMO un avertissement stupide de compilateur; ce petit coût supplémentaire fait simplement partie du compromis que vous faites en utilisant bool et le compilateur ne devrait pas vous déranger à ce sujet.

3

Essayez plutôt de convertir BOOL en BOOL. Vous pourriez aussi trouver ce fil intéressant: Difference between bool and BOOL.

Je ne suis pas sûr que ce soit ce que vous cherchez cependant. BOOL est 16 bits, pas 8 bits. Si ce n'est pas grave, alors il est plus proche de ce que vous cherchez que bool. Sinon, vous pouvez utiliser octet. Notez que si vous finissez par lancer l'un de ceux-ci, vous ne pourrez plus faire == true. Ceci est également expliqué dans le lien que j'ai fourni.

Questions connexes