[C언어] return 0, 그리고 0과 1의 진짜 의미

2025. 10. 6. 16:46·Development

오랜만에 C언어 보기 👀

정보처리기사 실기 프로그래밍 언어에는 C언어, 자바, 파이썬이 나온다. 고로 두루두루 알고 있어야 함!! 

C언어는 대학교 1학년 때 배운 이후로 다 까먹은..

 

 

C언어

 

C언어의 return 0은 왜 True가 아닐까?

return 0;이 “정상 종료”라는 건 알고 있지만, 

“그럼 0이 True인가?”, “if문에서 0이면 실행되나?” 같은 궁금증이 문득 들었다.

 

이 글은 C언어와 Shell에서 0과 1의 의미를 설명한다.

 

C에서의 0과 1 (False / True)

값 의미 조건식에서의 동작
0 거짓(False) 분기 진입 안 함
0 이외의 모든 값 참(True로 간주) 분기 진입
if (0)     puts("실행 안 됨");
if (1)     puts("실행 됨");
if (-5)    puts("이것도 실행 됨"); // 0이 아니면 참
참고: C99 <stdbool.h>에서 true==1, false==0으로 매크로 정의된다.

 

찾아보니 return 0은 c언어에서 프로그램의 종료 의미만 가질 뿐..

요새는 main 함수에서는 return 0을 명시하지 않아도 자동으로 처리된다고 한다.

더보기

C99 이후 표준에서는 main의 끝까지 도달하면 return 0;과 동일하다고 규정한다.

  • C89/90에선 보장되지 않았고, C99(C11, C17 포함)부터 보장.

 


return 0;의 의미

main() 함수에서의 return 0;은 논리적 True/False와는 전혀 관계가 없다.

int main(void) {
    // ...
    return 0;
}

이 0은 운영체제에게 전달되는 종료 상태 코드(`exit code`) 다.
• 0 → “정상 종료(오류 없음)”
• 1 이상 → “비정상 종료(오류 발생)”

즉, “return 0 = 성공적 종료”이지, “true”가 아니다.


Shell(Bash)에서의 0, 1

리눅스 쉘에서는 이 개념이 반대다.

값  의미  Shell의 해석
0  성공(Success)  참(True처럼)
1 이상  실패(Fail)  거짓(False처럼)

예시

# 예시
if grep "main" file.c; then
  echo "찾았다"   # grep이 성공(0) 반환 → 실행됨
else
  echo "못찾음"   # grep이 실패(1) 반환 → 실행 안됨
fi

즉, 쉘에서는 0이 성공 = True,
C에서는 0이 거짓 = False이다.


비교 요약

구분  0의 의미  1의 의미  기억 팁
C / Java / Python  False (거짓)  True (참)  “0은 꺼짐”
Shell / Bash  Success (성공)  Fail (실패)  “0은 문제없음”

외워두기:

C언어는 0이 거짓, 쉘은 0이 성공.


왜 이렇게 다를까?

C는 논리 연산 중심 언어이고,
Shell은 프로세스의 성공/실패 상태 전달 중심 언어이기 때문이다.

C에서는 논리 계산 결과를 0/1로 표현하고,
Shell에서는 프로그램이 잘 끝났는지를 성공이면 0, 실패면 0이 아닌 다른 숫자로 표현한다.


“return 0이 종료 코드로 해석되는 주체가 어디냐”가 C와 Shell의 핵심 차이다.

 

C에서 return 0은 “운영체제에게 보내는 종료 코드”

C 프로그램이 끝날 때 main() 함수가 반환한 값은 운영체제(OS) 에게 전달된다.

이 값은 단순한 함수의 return 값이 아니라 “프로세스의 종료 코드(exit code)”이다.

int main(void) {
    // 프로그램 로직 ...
    return 0;  // 운영체제에게 "정상 종료" 신호 보냄
}

 

  • main() 함수가 끝나면, 내부적으로 exit(0)과 동일하게 처리된다.
  • 이때 운영체제는 이 값을 받아서, “이 프로그램이 성공적으로 끝났는가?”를 를 판단한다.
  • 따라서 return 0;은 “논리적 true”가 아니라 “정상 종료(exit code 0)”을 의미한다.

 

예시

$ gcc test.c -o test
$ ./test
$ echo $?
0

→ `echo $?`는 직전 프로그램의 종료 코드를 출력한다.

C 프로그램이 return 0;으로 끝났기 때문에 쉘이 0을 받는 것이다.


쉘에서 종료 코드는 “프로그램 실행 결과를 판단하는 기준”

리눅스 쉘은 실행한 명령어의 종료 코드를 읽어와 조건문을 판단한다.

이때 기준은 다음과 같다.

종료  코드의미 Shell에서의 판단
0 정상 종료 (성공) 참(True)
1 이상 오류, 비정상 종료 거짓(False)
if ./test; then
  echo "정상 종료"
else
  echo "오류 발생"
fi

 

  • ./test가 return 0;으로 끝나면 → 참 → “정상 종료”` 출력
  • return 1;로 끝나면 → 거짓 → "오류 발생" 출력

 


핵심 차이

구분 return의 주체 0의 의미 이 값이 전달되는 곳
C 프로그램(프로세스) 정상 종료(exit code) 운영체제(OS)
Shell 실행된 외부 프로그램 성공(success) 쉘 내부 조건 판단

즉,

  • C의 return 0은 OS에게 “성공적으로 끝났다”는 신호를 주는 행위,
  • Shell은 이 신호(종료 코드 0)를 보고 “성공(true)”로 판단하는 구조이다.

 

결국 C와 Shell은 서로 반대되는 게 아니라,

C → exit code 생성자,

Shell → exit code 해석자 관계

 


마무리

  • C언어:
    • 0 → false
    • 0이 아닌 값 → true
    • return 0; → 정상 종료(exit code 0)
  • Shell:
    • 0 → 성공(true처럼)
    • 1 이상 → 실패(false처럼)

결국 “0의 의미는 같지만 맥락이 다르다”는 게 핵심이다.
C에서는 “논리값”, Shell에서는 “종료 코드”라는 점만 기억하면 더 이상 헷갈리지 않는다.

'Development' 카테고리의 다른 글

[React] 배포 후 간헐적으로 개발 서버에서 화면 에러가 뜨는 이유  (0) 2025.10.14
[Web] 브라우저 “탭( Tab )”을 노리는 공격, Tabnabbing  (0) 2025.10.13
[macOS] port 빠르게 종료하기  (0) 2025.09.30
[Cursor] Figma MCP 연결하기 (더이상의 반복 작업은 지양한다)  (2) 2025.09.30
[ChatGPT] 이미 구독 중이라면, 3개월 동안 Plus 50% 할인 받기  (0) 2025.09.29
'Development' 카테고리의 다른 글
  • [React] 배포 후 간헐적으로 개발 서버에서 화면 에러가 뜨는 이유
  • [Web] 브라우저 “탭( Tab )”을 노리는 공격, Tabnabbing
  • [macOS] port 빠르게 종료하기
  • [Cursor] Figma MCP 연결하기 (더이상의 반복 작업은 지양한다)
곽진돔
곽진돔
Developer
  • 곽진돔
    echo "곽박한 세상";
    곽진돔
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Development (74)
        • Linux (13)
        • k8s (3)
        • Docker (5)
        • AWS (1)
        • PHP (35)
        • Python (21)
        • Java (1)
        • SpringBoot (4)
        • JavaScript (2)
        • React (10)
        • MySql (19)
        • MongoDB (1)
      • Daily (6)
      • Study (7)
        • TIL (2)
        • license (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 설정
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    크롤링
    error
    JavaScript
    Selenium
    nodejs
    CentOS
    MySQL
    Java
    윈도우
    IP
    인코딩
    chromedriver
    Python
    정규표현식
    CentOS7
    react
    docker
    php
    db
    리액트
    UTF8
    리눅스
    HTML
    ssh
    date
    SQL
    Shell
    springboot
    Linux
    스프링부트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
곽진돔
[C언어] return 0, 그리고 0과 1의 진짜 의미
상단으로

티스토리툴바