Исправление: При запуске приложения, построенного с помощью компилятора параметр /Ot в Microsoft Visual Studio 2005 Пакет обновления 1 (SP1), некоторые операторы «if» могут работать некорректно

Симптомы

Используйте параметр компилятора /Ot (приоритет быстрого кода) при построении приложения, настроенного на x64 платформу в Microsoft Visual Studio 2005 Пакет обновления 1 (SP1). При запуске приложения, некоторые операторы if может работать неправильно. Таким образом результаты будут непредсказуемыми. Например Если инструкции могут быть пропущены в созданном коде приложения.

Эта проблема возникает только в следующей ситуации.

  • Существуют некоторые инструкции MOV между двумя операциями сравнения.

  • Это сравнение использования операций теми же операндами.

  • С помощью инструкции MOV изменяются значения операндов.

В этом случае операторы if в второй операции сравнения могут быть пропущены.

Примечания

  • Эта проблема может возникать при использовании параметра/O2 или /Ox для построения приложения.

  • Эта проблема не возникает на x86 платформы.

Причина

Эта проблема возникает из-за оптимизации компилятора ошибочно предполагает, что флаг, который задается с помощью операции XOR может использоваться без включения операции сравнения.

Решение

Сведения об исправлении

Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте это исправление только в тех случаях, когда наблюдается проблема, описанная в данной статье. Это исправление может проходить дополнительное тестирование. Таким образом если вы не подвержены серьезно этой проблеме, рекомендуется дождаться следующего пакета обновления, содержащего это исправление.

Если исправление доступно для скачивания, имеется раздел "Пакет исправлений доступен для скачивания" в верхней части этой статьи базы знаний. Если этот раздел не отображается, обратитесь в службу поддержки для получения исправления.

Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Чтобы получить полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание, посетите следующий веб-сайт корпорации Майкрософт:

http://support.microsoft.com/contactus/?ws=supportПримечание. В форме "Пакет исправлений доступен для скачивания" отображаются языки, для которых доступно исправление. Если нужный язык не отображается, значит исправление для данного языка отсутствует.

Предварительные условия

Visual Studio 2005 с Пакетом обновления 1 для установки этого исправления необходимо иметь.

Необходимость перезагрузки

Не требуется перезагружать компьютер после установки данного исправления.

Сведения о замене исправлений

Это исправление не заменяет других исправлений.

Сведения о файлах

Английская версия данного исправления содержит атрибуты файла (или более поздние атрибуты файлов), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, откройте вкладку Часовой пояс элемента Дата и время в панели управления.

Имя файла

Версия файла

Размер файла

Дата

Время

Платформа

C2.dll

14.0.50727.3080

2,273,280

19 ноября 2008 г.

18:52

x86

C2.dll

14.0.50727.3080

7,192,576

19 ноября 2008 г.

23:25

IA-64

C2.dll

14.0.50727.3080

2,490,368

19 ноября 2008 г.

23:26

x86

C2.dll

14.0.50727.3080

3,600,384

19 ноября 2008 г.

23:33

x64

C2.dll

14.0.50727.3080

2,203,648

19 ноября 2008 г.

23:33

x86

Временное решение

Чтобы обойти эту проблему, воспользуйтесь одним из следующих методов:

  • Используйте ключевое слово volatile при объявлении переменных, используемых в инструкции if .

  • Отключите параметр оптимизации скорости. Например замените параметр /Ot параметр /Os (приоритет размера кода) . Или используйте параметр/O1 вместо параметра/O2 или /Ox .

  • Добавьте строку кода до операции сравнения операторы if в секунду. Например добавьте оператор printf .

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Дополнительные сведения

Дополнительные сведения о коде одного или нескольких, операторы могут работать некорректно при использовании функции оптимизации кода в Visual Studio 2005 щелкните следующий номер статьи базы знаний Майкрософт:

925792 один или несколько операторов кода могут работать некорректно при использовании функции оптимизации кода в Visual Studio 2005

Для получения дополнительных сведений о терминологии обновлений программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:

Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×