C# 컴파일러는 "true"나 "false"나 딱 1종류만 있다고 생각함.
ECMA CLI 사양에서는 "false"는 0을 뜻하고 "true"는 0 이외의 모든 것을 뜻함.
그래서 이 코드를 실행시키면 True/True/False가 나옴.
컴파일러가 보기엔 a[0]나 b[0]나 똑같은 true지만 CLI가 보기엔 a[0]은 1이고 b[0]은 2니까 다르다는 논리.
그리고 CLI를 거치지 않아서 그런지 디버거는 a[0]나 b[0]나 똑같은 놈이라고 생각함.
디버거랑 다를줄은 몰랏내
해당 댓글은 삭제되었습니다.
true == true가 true나온건데 어떻게 오류임
bool array여도 저렇게 나오니 ub라고 부르는것.
bool array의 경우 각 원소를 1byte로 구현해놔서 bool이긴 한데 1btyte 내의 값을 강제로 설정하는게 가능함. 여기서 C#컴파일러와 CLI의 스펙이 달라서 생기는 ub임.
어디서 보기 힘든 고급 정보 감사...
bool array라고 선언하고 값을 저런 식으로 넣을 수가 있네 256 넣으면 어떻게 됨?
당연하지만 byte의 범위는 0~255까지고 따라서 256은 컴파일러가 에러 띄워줌.
본문이랑 관련 없는건데, C#개발환경으로 rider 어때요? - dc App
저는 개인적으로 불편한데, 쓰는 사람은 잘 쓰더라고요. 괜찮은 것 같음.
정의되지 않은 동작=언어스팩에 이래이래 되야함. 라고 안써있는 것들. 구현마다 동작이 다를 수 있음.