переполнение в size_t дополнениях

Вот что дает вам желаемый эффект:

NotificationListener(
 onNotification: (ScrollNotification scrollInfo) {

   if (scrollInfo is ScrollUpdateNotification) {
     if (scrollInfo.scrollDelta >= 20.0)      {
       FocusScope.of(context).requestFocus(FocusNode());
      }
     }

    },
 child: new FirebaseAnimatedList ...)
8
задан Nils Pipenbrinck 29 October 2016 в 05:16
поделиться

6 ответов

Относительно, ли size_t подписывается или не подписан и GCC (из старого руководства GCC - я не уверен, все еще ли это там):

Существует потенциальная проблема с size_t тип и версии GCC до выпуска 2.4. ANSI C требует этого size_t всегда будьте неподписанным типом. Для совместимости с заголовочными файлами существующих систем GCC определяет size_t в stddef.h быть безотносительно типа система sys/types.h определяет его, чтобы быть. Большинство систем Unix, которые определяют size_t в sys/types.h, определите его, чтобы быть типом со знаком. Некоторый код в библиотеке зависит от size_t быть неподписанным типом, и не будет работать правильно, если оно будет подписано.

Код библиотеки GNU C, который ожидает size_t быть неподписанным корректно. Определение size_t поскольку тип со знаком является неправильным. Мы планируем это в версии 2.4, GCC будет всегда определять size_t поскольку неподписанный тип и 'fixincludes' сценарий будут массажировать систему sys/types.h чтобы не конфликтовать с этим.

Тем временем мы работаем вокруг этой проблемы, говоря GCC явно использовать неподписанный тип для size_t при компиляции библиотеки GNU C. 'настройте' автоматически обнаружит то, что вводит использование GCC для size_t расположите переопределить его при необходимости.

Если Вы хотите подписанную версию size_t использовать ptrdiff_t или в некоторых системах существует определение типа для ssize_t.

12
ответ дан 5 December 2019 в 08:01
поделиться

size_t должно быть не подписано.

Это обычно определяется как неподписанное долго.

Я никогда не видел, что он определяется иначе. ssize_t его дубликат со знаком.

Править: GCC определяет его, как вошел в систему некоторые обстоятельства. компиляция в режиме ASNI C или станд. 99 должна вынудить это быть неподписанным.

4
ответ дан 5 December 2019 в 08:01
поделиться

size_t неподписанный целочисленный тип, согласно C++ C стандарты. Любая реализация, которая имеет size_t подписанный является серьезно несоответствующим, и вероятно имеет другие проблемы мобильности также. Это, как гарантируют, повторится при переполнении, означании, что можно записать тесты как if (a + b < a) найти переполнение.

size_t превосходный тип для чего-либо включающего память. Вы делаете его правильно.

4
ответ дан 5 December 2019 в 08:01
поделиться

Для языка C используйте IntSafe. Также выпущенный Microsoft (чтобы не быть перепутанным с библиотекой SafeInt C++). IntSafe является рядом вызовов функции языка C, которые могут выполнить математику и сделать преобразования безопасно. обновленный URL для функций intsafe

2
ответ дан 5 December 2019 в 08:01
поделиться

Я не уверен, понимаю ли я вопрос точно, но возможно можно сделать что-то как:

temp = value_to_be_added_to;

value_to_be_added_to += value_to_add;

if (temp > value_to_be_added_to)
{
  overflow...
}

Так как это перенесется назад к нижним значениям, можно легко проверить, переполнилось ли это.

-1
ответ дан 5 December 2019 в 08:01
поделиться

Используйте safeint. Это - класс, разработанный Michael Howard и выпущенный как открытый исходный код из Microsoft. Это разработано для создания работы с целыми числами, где переполнение идентифицируется как риск. Все переполнение преобразовывается в исключения и обрабатывается. Класс разработан для создания корректного использования легким.

Например:

char CouldBlowUp(char a, char b, char c)
{
   SafeInt<char> sa(a), sb(b), sc(c);

   try
   {
     return (sa * sb + sc).Value();
   }
   catch(SafeIntException err)
   {
      ComplainLoudly(err.m_code);
   }

   return 0;
}

Также safeint используется много внутренне в Microsoft в продуктах как Office.

Касательно: текст ссылки

0
ответ дан 5 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: