Один и тот же компилятор, создающий различное поведение на разных ОС - PullRequest
0 голосов
/ 03 января 2012

Некоторые из нас в моей компании спорят об этом.Учитывая исходный код и компилятор (скомпилированный с теми же флагами / переключателями), возможно ли, что компилятор создаст двоичные файлы, которые будут иметь различные поведения в разных ОС?

Конкретно, у нас есть проект C #, который долженработать в Windows XP и Windows 7, оба 32-разрядных.Компилятор VS 2008. Существует файл решения (* .sln), который содержит все необходимые файлы, сборки, проекты и т. Д., Которые мы используем для сборки программного обеспечения.

Возможно ли, что если код (такой жефайл решения) скомпилирован в VS 2008 (с такими же флагами / переключателями, как и тот же файл решения) в XP создаст двоичный файл, который будет иметь поведенческую разницу , чем скомпилированный двоичный файл в Windows 7?

Под поведенческой разницей я подразумеваю в данной ситуации ...

  • Сборка XP будет работать так, как ожидалось в XP
  • Сборка Win 7 будет работать так, как ожидается вWin 7
  • Сборка XP может вызвать ошибку (может быть сбой или непредвиденное поведение) в Win 7 и наоборот

Проект слишком велик, чтобы придуматьмаленький тестовый проект.Я хочу знать, в каких случаях (если таковые имеются), когда вышеприведенное верно.

Ответы [ 3 ]

5 голосов
/ 03 января 2012

При одинаковых установках VS2008, включая пакеты обновления, и при наличии идентичных сред, в том числе пакетов обновления, на тестовых машинах ответ - нет.

Однако это не означает, что не существует задач, выполняемых приложением, которые будут вести себя по-разному в разных операционных системах.

Вы также должны учитывать, что различные ответы операционной системы на приложение (брандмауэр, DEP, UAC и т. Д.) Могут выявить недостатки в приложении в одной операционной системе, которых нет в другой.

А затем возникает проблема с неуправляемым кодом, которая вообще является другой темой. И, пока мы работаем над этим, вызовы собственных приложений из вашего приложения могут вызвать нестабильность.

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

2 голосов
/ 03 января 2012

Простой ответ: нет.

Чаще всего ваше приложение дает сбой из-за различных обстоятельств.Например, отсутствующие библиотеки, файлы, ключи реестра;отключенные устройства.

Надеюсь, вы не делаете что-то странное, как это;)

if (DateTime.Now.Year != 2012)
   throw new Exception();
1 голос
/ 03 января 2012

Простой ответ - нет.Независимо от машины или операционной системы природа компилятора состоит в том, чтобы генерировать одну и ту же сборку на основе одного и того же кода.

Представьте, что произойдет, если это не так?Вы должны иметь отдельные машины сборки с различными операционными системами и с различными пакетами обновлений или чем-то еще.

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