부록 B 이식성 문제
이 절은 정보 제공입니다.
B.1 일반
이 부록은 이 사양에 표시되는 이식성에 대한 몇 가지 정보를 수집합니다.
B.2 정의되지 않은 동작
동작은 다음과 같은 상황에서 정의되지 않습니다.
- 인터페이스 메서드
INotifyCompletion.OnCompleted
의 awaiter 구현 시 바깥쪽 비동기 함수의 동작으로ICriticalNotifyCompletion.UnsafeOnCompleted
인해 재개 대리자가 한 번만 호출되지 않습니다(§12.9.8.4). - 포인터를 참조 또는 출력 매개 변수로 전달(§23.3).
- 한 포인터 형식을 다른 포인터 형식으로 변환한 결과를 역참조하는 경우 결과 포인터가 뾰족한 형식에 대해 올바르게 정렬되지 않습니다. (§23.5.1).
- 단항
*
연산자가 잘못된 값을 포함하는 포인터에 적용되는 경우(§23.6.2). - 포인터가 바깥쪽 요소(§23.6.4)에 액세스하기 위해 아래 첨자인 경우
- 고정 포인터를 통해 관리되는 형식의 개체 수정(§23.7).
- (§12.8.21)에 의해
stackalloc
새로 할당된 메모리의 내용입니다. - (§12.8.21)를 사용하여
stackalloc
음수의 항목을 할당하려고 합니다. - 값 인수가 있는 입력 매개 변수의 암시적 동적 변환(§10.2.10)(§12.6.4.2)입니다.
B.3 구현 정의 동작
이 하위 클래스에 나열된 각 영역에서 선택한 동작을 문서화하려면 준수 구현이 필요합니다. 구현 정의는 다음과 같습니다.
- 컴파일 단위에서 유니코드 NULL 문자(U+0000)의 처리입니다. (§6.1)
- 정규화 양식 C에 없는 식별자가 발견될 때의 동작입니다. (§6.4.3)
- 에
PP_Line_Indicator
허용되는 최대값입니다Decimal_Digit+
. (§6.5.8) - #pragma 지시문의 pp_pragma 텍스트에 있는 input_characters 해석입니다. (§6.5.10)
- 애플리케이션을 시작하기 전에 호스트 환경에서 전달한
Main
애플리케이션 매개 변수의 값입니다. (§7.1) - 프로그램이 클래스 라이브러리로 컴파일되는지 또는 애플리케이션으로 컴파일되는지를 결정하는 메커니즘입니다. (§7.1)
- 애플리케이션 도메인을 만들고 소멸하기 위해 구현에서 사용하는 정책 또는 메커니즘입니다. (§7.1)
- 예외로 인해 유효 진입점 메서드가 종료되는 경우 종료 코드입니다. (§7.2)
- 종료자가 애플리케이션 종료의 일부로 실행되는지 여부입니다. (§7.2)
- API에서 종료자를 두 번 이상 실행할 수 있는지 여부입니다. (§7.9)
- 종료자가 애플리케이션 종료의 일부로 실행되는지 여부입니다. (§7.9)
- 메서드에 대한 요구 사항을 초과하여
Expression<TDelegate>
제공하는 API 표면입니다Compile
. (§8.6) - 익명 함수가 식 트리로 변환되는 경우 식 트리의 정확한 구조와 이를 만드는 정확한 프로세스입니다. (§10.7.3)
- 컴파일 타임에 호환되는 대리자 형식으로의 변환이 실패할 수 있는 이유입니다. (§10.7.3)
- 크기 0의 스택 할당을 만들 때 반환되는 값입니다. (§12.8.21)
System.ArithmeticException
정수 나누기의 컨텍스트 및 왼쪽 피연산자에서 최대 음long
int
수 또는 값이고 오른쪽 피연산–1
자는 왼쪽 피연산자의unchecked
결과 값으로 인해 오버플로가 throw되거나 오버플로가 보고되지 않습니다. (§12.10.3)System.ArithmeticException
소수점 나머지 작업을 수행할 때 (또는 해당 하위 클래스)가 throw되는 경우 (§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
요소가 0인 경우 문의 동작입니다null
. (§23.7) - 문자열 식이 .인
fixed
경우 문의 동작입니다null
. (§23.7)
B.4 지정되지 않은 동작
- 개체에 대한 종료자(있는 경우)가 실행되는 시간이며, 해당 개체가 종료될 수 있게 되면(§7.9)
- (§8.3.9)의
true
표현입니다. - 컨텍스트에서 범위 외 값 또는 값을
float
정수 형식unchecked
으로 변환할 때의 결과 값입니다(§10.3.2double
). - 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). - 열거자 개체가 이전, 실행 중 또는 이후 상태(§15.14.5.3)에 있을 때 액세스
Current
한 결과입니다. - 열거자 개체가 실행 중 상태일 때 호출
Dispose
한 결과입니다(§15.14.5.4). - 여러 부분으로 선언된 형식의 특성은 각 파트의 특성을 지정되지 않은 순서로 결합하여 결정됩니다(§22.3).
- 멤버가 구조체로 압축되는 순서입니다(§23.6.9).
- 종료자 실행 중에 예외가 발생하고 예외가 catch되지 않습니다(§21.4).
- 둘 이상의 멤버가 일치하는 경우(§18.6.5)의
I.M
구현인 멤버입니다.
B.5 기타 문제
- 부동 소수점 식 계산의 정확한 결과는 구현이 필요한 것보다 더 큰 범위 및/또는 정밀도를 사용하여 이러한 식을 평가할 수 있기 때문에 구현마다 다를 수 있습니다(§8.3.7).
- CLI는 다른 프로그래밍 언어와의 호환성을 위해 특정 서명을 예약합니다(§15.3.10).
정보 텍스트의 끝입니다.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
ECMA C# draft specification