sourcecode

C API에서 0은 '참'을 의미하고 1은 '거짓'을 의미하는 것이 일반적입니까?

copyscript 2023. 9. 16. 09:49
반응형

C API에서 0은 '참'을 의미하고 1은 '거짓'을 의미하는 것이 일반적입니까?

을 발견했습니다.is_equals()동일하지 않은 SQL 테이블의 경우 1을 반환하고 동일한 테이블의 경우 0을 반환한 작업의 C API에서 함수입니다(false).저는 제 코드에 테스트 케이스를 실행한 후에야 그것을 깨달았습니다. 하나는 양성 예제, 하나는 음성 예제인데 둘 다 실패했습니다. 처음에는 말이 안 되었습니다.API의 코드는 출력이 문서에 정확하게 기록되어 있어 버그가 없습니다.

제 질문은 이 논리적 노팅이 정상인 거꾸로 세계/평행 우주/코딩 언어가 있습니까?1은 보통 사실 아닌가요?API의 코더에 오류가 있습니까?

는 가 이 입니다 되는 입니다를 입니다.0"between"에서 "between"의 음수를 반환하고 "between"의 양수를 반환할 수 있습니다.strcmp()그리고.memcmp()이런 식으로 일을 합니다.

그러나 0이 거짓이 되고 0이 아닌 것이 참이 되는 것은 관용적입니다. 왜냐하면 이것이 C 흐름 제어 및 논리적 부울 연산자의 작동 방식이기 때문입니다.따라서 이 함수에 대해 선택된 반환 값은 문제가 없을 수 있지만, 오류가 있는 함수의 이름입니다(정말로 그냥 호출되어야 합니다).compare()(또는 유사).

이 거꾸로 된 세계는 프로세스 오류 반환에 일반적입니다. 변수쉘$? 알 수 있습니다. 프로그램의 성공 여부는 다음과 같습니다.

$ false ; echo $?
1
$ true ; echo $?
0

이것은 프로그램이 성공하는 경우는 하나이지만 프로그램이 실패하는 이유는 수십 가지가 있을 수 있기 때문에 선택한 것입니다. 여러 가지 오류 코드를 허용함으로써 출력을 해석할 필요 없이 프로그램이 다른 프로그램이 실패한 이유를 판단할 수 있습니다.

로는 aa-status AppArmordinary 액세스 제어 도구와 함께 제공되는 프로그램:

   Upon exiting, aa-status will set its return value to the
   following values:

   0   if apparmor is enabled and policy is loaded.

   1   if apparmor is not enabled/loaded.

   2   if apparmor is enabled but no policy is loaded.

   3   if the apparmor control files aren't available under
       /sys/kernel/security/.

   4   if the user running the script doesn't have enough
       privileges to read the apparmor control files.

(이런 행동을 하는 프로그램들이 더 많이 퍼져있을 것이라 생각하지만, 저는 이 프로그램을 잘 알고 있습니다.:)

간단한 답변

0 = false 
1 = true

성공 시 0을 반환하는 리눅스/유닉스 표준을 따르는 것이 아닌가 의심됩니다.

정말로 "1"이 거짓이고 "0"이 참이라고 말하는 건가요?

그럴만한 이유가 없습니다.10거짓을 말하는 것입니다. 그것은 항상 기록되어 왔던 방식입니다.따라서 논리적인 관점에서 볼 때, API의 기능이 "잘못된" 것입니다.

그렇기는 하지만, 일반적으로 사용하는 언어나 프레임워크의 관용구에 대항하여 작업하는 것은 권장되지 않습니다. 따라서 이 기능을 작성한 사람이 누구든 간에 단순한 버그가 아니라는 가정 하에, 아마도 꽤 머리가 좋은 사람이었을 것입니다.

원작자의 실수일 수도 있지만, 1이 참이고 0이 거짓이라는 개념은 보편적인 개념이 아닙니다.셸 스크립트에서 0은 성공을 위해 반환되고, 나머지 숫자는 실패를 위해 반환됩니다.루비와 같은 다른 언어에서는 nil과 false만 false로 간주되고 다른 값은 true로 간주되므로 루비에서는 1과 0 모두 true로 간주됩니다.

제가 질문에 제대로 답하고 있는지는 잘 모르겠지만, 여기에 익숙한 예가 있습니다.

반환 유형:GetLastError()오류가 있으면 0이 아니고, 아니면 0이 아닙니다.그 반대는 대개 호출한 함수의 반환 값에 해당합니다.

일반적으로 우리는 0은 거짓이고 1은 참이라고 생각합니다.

언급URL : https://stackoverflow.com/questions/6475181/is-it-common-for-0-to-mean-true-and-1-to-mean-false-in-a-c-api

반응형