최근에 C 코드를 좀 짜고 있는데, 에러 상황에서 return을 해야할때 습관적으로 return -1을 해주고 있었다.
그런데 오늘 알게 된건 return -1은 올바르지 않고 return 1이 올바른 관습이라고 한다.
통상 int main에서 성공인 경우 return 0을 하는데, 늘 시스템 콜 중에서 실패인 경우 -1을 주는 경우가 있어서 나도 모르게 int main에서도 return -1을 해버렸다. 그런데 이 경우 쉘이 받아들일때 0~255 내 return value를 받아서 해석하는데 -1을 받아버리니 이게 255가 되어버리고 잘못된 케이스로 인해 프로세스가 종료되었다고 오해석되는 것이다.
그래서 return 1이 맞다고 한다.
쉘은 non-zero를 받을때 에러 케이스에 의해 Fail된거구나로 이해하는데, 그러면 -1을 주면 255를 받는거니 문제없는거 아닌가? 일 수도 있는데 여기선 그냥 오해석되는게 문제다. 내가 의도한게 -1을 준건데 255로 해석되는 것 자체가 문제라는 거다.
'C & C++ > C' 카테고리의 다른 글
| [C] DMA란 무엇인가? (0) | 2026.01.12 |
|---|---|
| [C] stdio buffering control (0) | 2026.01.11 |
| [C] C language의 연산자 우선순위는 설계 실수인가? (0) | 2024.01.01 |
| [C] Mingw 세팅 (0) | 2023.11.23 |
| [C] 환경변수를 출력하는 envp의 미스터리한 동작 발견. 이유가 대체 뭘까요? <extern char ** environ;> (1) (0) | 2022.04.13 |