1

エラーなしでreMailプロジェクトをコンパイルした後、次の警告の 1 つが表示されます。

remail-iphone/sqlite3/sqlite3.c:18703:15: 符号付きシフト結果 (0x1F0000000) を表すには 34 ビットが必要ですが、「int」には 32 ビットしかありません

つまり(0x1f<<28)、次のコードで:

  if (!(a&0x80))
  {
    a &= (0x1f<<28)|(0x7f<<14)|(0x7f);
    b &= (0x7f<<14)|(0x7f);
    b = b<<7;
    a |= b;
    s = s>>11;
    *v = ((u64)s)<<32 | a;
    return 7;
  }

iOS (32 ビット) でこの警告を無効にする適切な方法は何ですか?

4

1 に答える 1

1

reMail for iPhone は古いバージョンの SQLite (3.6.15) を使用しているようです。私が間違っていなければ、次のコミットはこの問題を正確に修正するはずです: http://www.sqlite.org/src/info/587109c81a9cf479?sbs=0

if (!(a&0x80))
{
    /* assert( ((0xFF<<28)|(0x7f<<14)|(0x7f))==0xf01fc07f ); */
    a &= 0xf01fc07f;
    b &= (0x7f<<14)|(0x7f);
    b = b<<7;
    a |= b;
    s = s>>11;
    *v = ((u64)s)<<32 | a;
    return 7;
}

ただし、この問題が発生するコード セクションが他にもある可能性があります。上記のリンクは util.c の 2 つのインスタンスを示していますが、sqlite.c は「SQLite からの多くの個別の C ソース ファイルの融合」であるため、追加の出現を見つけることができます。おそらく、reMail は最近のバージョンの SQLite でも動作するでしょう...

于 2013-05-14T11:18:45.707 に答える