2017-01-26 8 views
0

이 완료 스위프트 프로그램은 255의 종료 코드 제공 :Swift (Darwin)에서 exit()가 UInt8 대신 Int32를 사용하는 이유는 무엇입니까?

import Darwin 
exit(-1) 

내가 Program ended with exit code: 255를 얻을 엑스 코드 내에서 실행; 명령 줄에서 컴파일하고 실행할 때 echo $?255을 생성합니다. 어떤 점에서 Int32(-1)은 잘려서 부호없는 8 비트 정수로 해석됩니다.

아마 Darwin 어딘가에서 또는 값이 호스트 쉘 또는 OS로 전달 될 때 어디에서 발생하는지 알 수 없지만 exit()은 Darwin 라이브러리 기능 (Swift 언어 기능 아님)이기 때문에 플랫폼과 관련하여 이미 정의 된 이유는 UInt8 대신 Int32을 사용해야하는 이유는 무엇입니까?

+1

예 : http://stackoverflow.com/questions/1703741/basic-c-question-about-return-values ​​또는 http://stackoverflow.com/questions/26435730/forked-child-exits-with-1-but-wexitstatus- gets-255. –

+0

@MartinR이 두 가지 질문은 C에 관한 것이지만이 질문은 왜 255가 튀어 나오는 지에 관한 것이 아닙니다. 그것은 Swift의 exit() 함수가 Swift 프로그래머 (다른 언어를 한 번도 해 본 적이없는 사람)에게 더 현명하지 않고 설계/정의 된 이유입니다. 그것은 나에게 분명히 비 관대 해 보인다. – jhabbott

+2

'exit()'는 C 라이브러리 함수이며, C 또는 Swift에서 호출하면 상관 없습니다. –

답변

3

다음과 같은 프로토 타입을 가지고 표준 C exit 기능이기 때문에 :

void exit(int); 

시스템에 스위프트 그것을 위해 Int32을 사용하는 이유는 그래서 int 32 비트입니다.

잘림은 C exit 함수의 어딘가에서 발생합니다.

+0

이것은 이유 일 수도 있고 그렇지 않을 수도 있지만, 그렇다면 라이브러리 디자인의 관점에서 이해가되지 않습니다. 왜 Swift에서 함수가 자신의 정의와 일관성없이 작동하도록 설계했는지, "C가하는 것 "또는"우리는 C로 구현하므로 우리는 그 행동을 상속받습니다 "라고 말했습니까? 0-255를 기대하는 셸 스크립트와의 호환성을 위해이 동작을 채택하도록 디자인 결정을 내린 경우 (C가 수행하기 때문에) UInt8을 사용하도록 함수를 디자인하고 문서화해야할까요? – jhabbott

+0

'exit'는 Swift 기능이 아니며 Swift 용으로 설계되지 않았습니다. 그것은 단지 Swift로부터 호출 할 수있는 C 함수입니다. 다른 모든 것들은'Darwin'에서와 같습니다. – emlai

+0

hrm .. 알았어 - 그 말이 맞는 것 같아. 실제로 Swift 인터페이스는 아니지만 C 인터페이스에 매핑하려는 경우. 여전히 - 맵핑을 생성 할 때 호출 언어의 관습/기대를 사용해야하기 때문에 빈약 한 인터페이스 설계를 고려합니다. – jhabbott