Тип, переводящий переменную из jBoolean в bool

При использовании JNI для взаимодействия между Java и C javah анализирует логическое значение в Java до jBoolean в заголовочном файле JNI. Когда я использую bool в файле C, компилятор Visual studio выдает предупреждение о том, что

warning C4800: 'jboolean': принудительное значение для bool 'true' или 'false' (предупреждение о производительности)

Есть ли какой-либо другой тип данных, который следует использовать? Или если bool является единственным типом данных здесь, каковы именно проблемы с производительностью, с которыми я могу столкнуться?

Ответ 1

"Проблема с производительностью" заключается в том, что литье не является полностью бесплатным. Отливка bool по существу означает принудительное выполнение всех ненулевых значений до 1, которое берет маленький бит кода, в отличие от "свободного" броска, такого как расширение char до int. "Проблема с производительностью" - это несколько дополнительных инструкций машины. Если вы делаете это миллион раз в трудном цикле, хорошо, может быть, вам все равно - иначе, нет, вам все равно. Это ИМО - глупое предупреждение компилятора; что небольшая добавленная стоимость - это просто часть компромисса, который вы используете при использовании bool, и компилятор не должен беспокоить вас об этом.

Ответ 2

Попробуйте выполнить кастинг для BOOL. Вы также можете найти эту интересную тему: Разница между bool и BOOL.

Я не совсем уверен, что это то, что вы ищете. BOOL - 16 бит, а не 8 бит. Если это нормально, то это ближе к тому, что вы ищете, чем к bool. В противном случае вы можете использовать байт. Обратите внимание, что если вы закончите кастинг с любым из них, вы больше не сможете сделать == true. Это также объясняется в приведенной ссылке.