Как убрать предупреждение «большое целое число неявно усечено» для поддержки sqlite / unicode? - PullRequest
1 голос
/ 20 декабря 2009

Я использую решение http://ioannis.mpsounds.net/2007/12/19/sqlite-native-unicode-like-support/ для своего приложения для POS для iPhone , и отлично работаю.

Однако, как говорится в комментариях:

Например, строка 1861 sqlite_unicode.c содержит целочисленные константы больше 0xffff, но объявляется как unsigned short. Интересно, как мне с этим справиться.

Я исправляю все предупреждения в моем проекте, и это последнее. Код такой:

static unsigned short unicode_unacc_data198[] = { 0x8B8A, 0x8D08, 0x8F38, 0x9072, 0x9199, 0x9276, 0x967C, 0x96E3, 0x9756, 0x97DB, 0x97FF, 0x980B, 0x983B, 0x9B12, 0x9F9C, 0x2284A, 0x22844, 0x233D5, 0x3B9D, 0x4018, 0x4039, 0x25249, 0x25CD0, 0x27ED3, 0x9F43, 0x9F8E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF };

Я не знаю об этом шестнадцатеричном материале, так что делать? Я не получаю сообщение об ошибке, не знаю, может ли это вызвать ошибку в будущем ...

1 Ответ

1 голос
/ 20 декабря 2009

Да, 0x2284A действительно больше, чем 0xFFFF, что является наибольшим значением, которое может содержать 16-разрядное целое число без знака. (*)

Это справочная таблица для отображения символов с диакритическими знаками на основные символы без акцента. По некоторым причинам определены несколько отображений, которые указывают на символы вне «Базовой многоязычной плоскости» символов Юникода, которые помещаются в 16 бит.

U + 2284A и другие, приведенные выше, являются весьма неясными расширенными китайскими иероглифами. Я не уверен, почему персонаж в BMP будет ссылаться на такого персонажа как на его базовую версию без акцента. Возможно, это ошибка в исходных данных, используемых для генерации таблиц, или, может быть, это просто еще одна странная странность китайской системы письма. В любом случае, крайне маловероятно, что вам когда-либо понадобится это отображение. Поэтому вместо этого просто измените все пятизначные шестнадцатеричные коды в этом массиве на 0xFFFF (что, по-видимому, и используется кодом для обозначения «без отображения»).

(*: теоретически short может быть больше 16 битов, но на самом деле это не так. Если бы это выглядело так, как будто этот код в любом случае полностью упал, так как он свободно смешивался short с u16 указателями.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...