Проблемы с переносимостью приложения B
Это предложение является информативным.
Общие сведения B.1
Это приложение собирает некоторые сведения о переносимости, которая отображается в этой спецификации.
Неопределенное поведение B.2
Поведение не определено в следующих обстоятельствах:
- Поведение заключающей асинхронной функции при реализации методов
INotifyCompletion.OnCompleted
интерфейса в ожидании иICriticalNotifyCompletion.UnsafeOnCompleted
не приводит к вызову делегата возобновления не более одного раза (§12.9.8.4). - Передача указателей в качестве ссылочных или выходных параметров (§23.3).
- При расшифровке результата преобразования одного типа указателя в другой, а результирующий указатель неправильно выравнивается для типа с указанием на тип. (§23.5.1).
- Когда унарный
*
оператор применяется к указателю, содержащей недопустимое значение (§23.6.2). - Если указатель подписывается для доступа к элементу вне границ (§23.6.4).
- Изменение объектов управляемого типа с помощью фиксированных указателей (§23.7).
- Содержимое памяти, недавно выделенное
stackalloc
(§12.8.21). - Попытка выделить отрицательное число элементов с помощью
stackalloc
(§12.8.21). - Неявные динамические преобразования (§10.2.10) входных параметров с аргументами значений (§12.6.4.2).
Поведение, определяемое реализацией B.3
Соответствующая реализация требуется для документирования выбранного поведения в каждом из областей, перечисленных в этом подклаузе. Ниже приведены определения реализации.
- Обработка символа NULL Юникода (U+0000) в единице компиляции. (§6.1)
- Поведение при обнаружении идентификатора, не в форме нормализации C. (§6.4.3)
- Максимально допустимое
Decimal_Digit+
PP_Line_Indicator
значение в . (§6.5.8) - Интерпретация input_characters в тексте pp_pragma директивы #pragma. (§6.5.10)
- Значения всех параметров приложения, передаваемых
Main
в среду узла перед запуском приложения. (§7.1) - Механизм определения того, компилируется ли программа как библиотека классов или как приложение. (§7.1)
- Политика или механизмы, используемые реализацией для создания и уничтожения доменов приложений. (§7.1)
- Код выхода, если метод эффективной точки входа завершается из-за исключения. (§7.2)
- Независимо от того, выполняются ли методы завершения в рамках завершения приложения. (§7.2)
- Разрешает ли API-интерфейсы выполнять метод завершения более одного раза. (§7.9)
- Независимо от того, выполняются ли методы завершения в рамках завершения приложения. (§7.9)
- Область API, предоставляемая за пределами
Expression<TDelegate>
требования к методуCompile
. (§8.6) - Точную структуру дерева выражений, а также точный процесс его создания, когда анонимная функция преобразуется в дерево выражений. (§10.7.3)
- Причина, по которой преобразование в совместимый тип делегата может завершиться сбоем во время компиляции. (§10.7.3)
- Значение, возвращаемое при выделении стека нулевого размера. (§12.8.21)
System.ArithmeticException
Возникает ли исключение (или подкласс) или переполнение не соответствует результирующем значению, являющемся левым операндом, когда вunchecked
контексте и левом операнде целочисленного деления является максимальным отрицательнымint
илиlong
значением, а правый операнду является–1
. (§12.10.3)System.ArithmeticException
Если при выполнении десятичной оставшейся операции возникает исключение (или подкласс). (§12.10.4)- Влияние завершения потока при отсутствии обработчика исключения, и сам поток завершается. (§13.10.6)
- Механизм, с помощью которого достигается связывание с внешним методом. (§15.6.8)
- Влияние завершения потока при отсутствии соответствующего
catch
предложения для исключения и кода, который изначально начал работу потока. (§21.4). - Среда выполнения может предоставлять дополнительные атрибуты, влияющие на выполнение программы C#. (§22.5.1)
- Сопоставления между указателями и целыми числами. (§23.5.1)
- Эффект применения унарного
*
оператора кnull
указателю. (§23.6.2) - Поведение, когда арифметика указателя переполняет домен типа указателя. (§23.6.6, §23.6.7)
- Результат
sizeof
оператора для неопределенных типов значений. (§23.6.9) - Поведение инструкции, если выражение массива
fixed
имеетnull
или имеет нулевые элементы. (§23.7) - Поведение инструкции
fixed
, если строковое выражение .null
(§23.7)
Неопределенное поведение B.4
- Время выполнения средства завершения (если такового) для объекта после того, как этот объект станет допустимым для завершения (§7.9).
- Представление
true
(§8.3.9). - Значение результата при преобразовании значений вне диапазона из
float
илиdouble
значений в целочисленный тип вunchecked
контексте (§10.3.2). - Точный целевой объект и целевой метод делегата, созданный из anonymous_method_expression , содержит (§10.7.2).
- Макет массивов, за исключением небезопасного контекста (§12.8.16.5).
- Существует ли какой-либо способ выполнения блока анонимной функции, отличной от оценки и вызова lambda_expression или anonymous_method-выражения (§12.19.3).
- Точное время инициализации статического поля (§15.5.6.2).
- Результат вызова
MoveNext
при выполнении объекта перечислителя (§15.14.5.2). - Результат доступа
Current
, когда объект перечислителя находится в состоянии до, выполнения или после состояния (§15.14.5.3). - Результат вызова
Dispose
, когда объект перечислителя находится в состоянии выполнения (§15.14.5.4). - Атрибуты типа, объявленного в нескольких частях, определяются объединением атрибутов каждого из его частей (§22.3).
- Порядок упаковки элементов в структуру (§23.6.9).
- Исключение возникает во время выполнения средства завершения, и это исключение не поймано (§21.4).
- Если несколько элементов совпадают, какой член является реализацией
I.M
(§18.6.5).
Другие проблемы B.5
- Точные результаты вычисления выражения с плавающей запятой могут отличаться от одной реализации к другой, так как реализация разрешена для оценки таких выражений с использованием большего диапазона и /или точности, чем требуется (§8.3.7).
- Интерфейс командной строки резервирует определенные подписи для совместимости с другими языками программирования (§15.3.10).
Конец информативного текста.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
ECMA C# draft specification