Step by step

한 걸음 한 걸음 천천히

Programming Language/C Language

C 프로그램의 처리 과정 및 함수, 변수의 개념

개발자 까마귀 2024. 4. 26. 19:37
728x90

이 글에선 C 프로그램이 실행되는 과정과 하나의 C 프로그램에 어떠한 것들이 들어있는지와 내부적 시스템에 대해 알아본다.
 

일반적인 프로그램의 형태

데이터를 받는다(입력 단계) → 데이터를 처리한다(처리 단계) → 결과를 화면에 출력한다(출력 단계)
Input → Processing → Output

읽기 좋은 코드

좋은 프로그램은 해당 프로그램을 작성한 개발자가 아니더라도 무슨 기능을 하는지 쉽게 알아볼 수 있는 코드를 작성하는 것이 중요하다.
그러기 위해 다양한 기법들을 사용할 수 있다.

변수, 함수 이름

변수와 함수에 대해서는 밑에서 다룸.
 
좋은 코드는 어떤 기능을 하는지 직관적인 함수명과 변수명을 통해 알아볼 수 있다.
변수와 함수의 이름을 지을 때는 어떤 역할을 하는지 그 이름에 담겨야 한다.
또한, 그 이름 자체를 알아보기 쉽게 하기 위한 방법들로도 여러가지가 있을 수 있다.
 

  • 카멜 케이스(camelCase): 낙타 등 모양에서 따왔다.
  • 케밥 케이스(kebab-case): 케밥의 모양에서 따왔다.
  • 파스칼 케이스(PascalCase): 옛 프로그래밍 언어 "pascal"에서 자주 쓰던 방식이다.
  • 스네이크 케이스(snake_case): 뱀의 굴곡진 형태에서 따왔다.
  • 헝가리안 케이스(strHungurianNotation): 헝가리 사람이 만들었다.

주석

주석은 코드를 문서화하는 역할을 한다. 주석을 통해 코드 작성 의도를 기술한다.
좋은 주석은 코드를 설명하지 않는 것이다.

/* 한 줄 주석 */

/* 여러 줄
   주석 */

// 한 줄 전체 주석
int x; // 이 뒤부터 주석

들여쓰기

#include <stdio.h>

int main() {
<-->int x, y;
<-->printf("%d %d", x + y);
<-->return 0;
}

들여쓰기는 2개, 4개, 8개의 스페이스 바 너비만큼 공백을 준다.
같은 수준의 문장들을 들여써서 구분을 한다.
 
들여쓰기와 주석이 없다면 매우 충격적인 수준으로 코드를 알아보기 힘들어진다.

전처리기

#include <stdio.h>
#define X 10

# 기호로 시작하는 것들은 전처리 지시자를 의미한다.
전처리 지시자들은 컴파일 이전에 수행되는 행을 말한다.

함수

함수는 특정 기능을 수행하는 처리 단계들을 중괄호로 묶어서 이름을 붙인 것을 의미하며, 프로그램을 구성하는 기본 단위이다.

int main(void) {
    printf("안녕하세요");
    return 0;
}

함수는 기본적으로 반환 타입과 반환 값을 갖는다. 통상적으로 프로그램이 문제 없이 수행되었을 경우 0을, 수행 도중 문제가 발생하였으면 그 이외의 값을 반환한다.
또한, 괄호로 묶인 내용에는 함수가 처리하는 처리 단계(문장)들이 중괄호 안에 나열되어 있다.
 
첫 번째 줄부터 int가 반환 타입, main이 함수 이름, void가 함수 인자를 의미한다. 다만, void는 함수 인자로 들어오는 것이 없다고 명시적으로 알려주는 것이며, 없어도 무방하다. return 0은 함수를 끝마치고 반환할 값을 의미한다.
 
함수 안에서 다른 함수를 호출하거나, 함수 자신을 호출할 수 있다.

더보기

그렇다면 main() 함수는 누가 호출할까? 라는 궁금증이 생긴다.

main() 함수는 C 프로그램 실행 시 OS가 호출하게 된다.

때문에 한 프로그램에서 main() 함수가 여러 개 존재 할 경우 OS는 어느 것을 호출해야할지 혼란이 생기기에 오류가 발생하는 것이다.

 
int main(void) 까지가 함수의 머리이며 괄호로 묶인 부분이 함수의 몸체 부분이다.

변수

프로그램이 사용하는 데이터를 임시로 담아두는 목적으로 사용하는 메모리 공간을 변수라고 한다.

int x;
int y;
int sum;

int가 변수의 자료형이며, x, y, sum이 변수명이다.
 
변수는 데이터를 임시로 담아두는 메모리 공간이기 때문에 언제든 값이 바뀔 수 있다. 이로인해 프로그램의 목적에 따라 데이터 값이 변해야 할 경우 사용한다.
 
예를 들어, 음식(데이터)을 먹기 위해 그릇(변수)이 필요한 것이라고 볼 수 있다.
즉 int x; 는 x라는 그릇을 선언한 것이라고 볼 수 있다.
 
그러나, 변수나 함수는 같은 이름을 여러 개 선언할 수 없으며 선언하지 않은 변수와 함수는 사용할 수 없다.

728x90