Skip to main content

프로그래밍 기초

C 프로그램 구조

C 프로그램의 기본적인 Console Application(콘솔 응용 프로그램) 구조는 다음과 같다. 프로그램의 설명을 위한 Comment(주석)와 컴파일 전 소스를 처리하는 Preprocessor(전처리기) 지시자, 프로그램의 시작점인 main 함수, 그리고 함수 내에 선언되는 지역 변수와 일반 명령문으로 구성된다.

/* 주석 내용 */

// 전처리기 지시자
#include <stdio.h>

// 모든 프로그램의 시작 함수
int main(void)
{
// 지역변수 선언
자료형 지역변수명;

// 일반명령문
...

// 메인함수의 반환
return 0;
}

프로그램 실행 순서

C 프로그램은 여러 Function(함수)의 조합으로 구성되며, Function은 정해진 규칙에 따라 일련의 작업을 수행하는 프로그램 단위이다. 프로그램 실행은 main 함수에서 가장 먼저 시작되며, 모든 Function 내부의 문장들은 위에서 아래로, 그리고 왼쪽에서 오른쪽 순서로 실행된다.

Preprocessor(전처리기)

Preprocessor는 컴파일러가 소스 코드를 기계어로 번역하기 전에 코드를 미리 처리하는 프로그램이다. 대표적인 Preprocessor 명령어인 #include는 명시된 Header File(헤더 파일)을 소스 코드에 포함시키는 역할을 한다. 예를 들어, #include <stdio.h>stdio.h 파일의 내용을 소스 파일에 삽입하여 새로운 소스를 생성하고, 컴파일러는 이 새로운 소스를 컴파일하여 목적 파일을 만든다.

Comment(주석)

Comment는 프로그램의 문법과 관계없이 코드를 설명하는 글을 넣기 위한 방법이다. C언어에서는 본래 /**/ 사이에 설명을 넣는 방식을 사용했으나, C++이 등장하며 // 이후부터 해당 줄의 끝까지를 설명문으로 처리하는 방식이 추가되었다. 적절한 Comment가 없는 코드는 이해하고 수정하기 어렵기 때문에, 프로그램의 유지보수에 있어 Comment는 매우 중요하다.

Indentation(들여쓰기)

Indentation은 {...} 기호로 묶인 코드 블록 내의 모든 문장 시작 부분에 공백이나 탭을 이용해 여백을 두는 코딩 방법이다. 이것은 문법 사항은 아니지만, 프로그램의 가독성을 높여 이해를 돕기 위해 반드시 필요한 코딩 스타일이다. Visual C++와 같은 IDE(통합 개발 환경)는 코드를 작성할 때 자동으로 적절한 Indentation을 적용해주기도 한다.

Keyword(키워드)와 Identifier(식별자)

Keyword는 C 언어 문법에서 고유한 의미를 갖도록 미리 정해진 단어, 즉 예약어(Reserved Words)이다.

Identifier는 사용자가 프로그램을 작성하면서 직접 정의하여 사용하는 단어들로, 주로 변수 이름이나 함수 이름으로 사용된다. Identifier를 만들 때의 규칙은 다음과 같다.

  • 영문 대소문자 (A-Z, a-z), 숫자 (0-9), 밑줄(_)만을 사용할 수 있다.
  • 첫 글자로는 숫자를 사용할 수 없다.
  • 대소문자를 구별한다.
  • Keyword는 Identifier로 사용할 수 없다.

변수

Variable(변수)은 프로그램에서 자료 값을 임시로 저장하기 위한 메모리 공간이다. int countKeywords; 와 같이 '자료유형 변수이름;' 형식으로 선언하면, 해당 자료유형에 맞는 크기의 메모리 공간이 할당된다. 그러나 선언만 하고 값을 저장하지 않으면, 해당 공간에는 의미 없는 쓰레기 값(garbage value)이 들어있다.

변수는 선언과 동시에 값을 저장하는 초기화가 가능하다. 예를 들어 int count = 10;과 같이 선언할 수 있다. 변수는 항상 마지막에 대입된 값만을 저장한다. 동일한 자료 유형의 변수 여러 개를 int a, b;int c=10, d=20;과 같이 한 문장으로 선언하고 초기화할 수도 있다.

자료유형이 가진 크기보다 더 큰 값을 저장하려고 하면 Overflow(오버플로)가 발생하여 예상치 못한 값이 저장될 수 있다. 예를 들어, short 형 변수에 32768을 저장하면 표현 범위를 넘어 -32768과 같은 음수 값으로 출력될 수 있다.

문장, 토큰, 블록

  • Token(토큰): 컴퓨터에 명령을 내리는 가장 기본적인 단위로, 문장을 이루는 단어나 기호를 의미한다. 예를 들어 int year = 2004;라는 문장에서 int, year, =, 2004, ;는 각각의 Token이다.
  • Statement(문장): Token들이 모여 구성된 하나의 완전한 명령으로, 세미콜론(;)으로 끝난다.
  • Block(블록): 여러 개의 Statement를 하나의 단위로 묶은 것으로, 중괄호 {...}를 사용하여 표현한다.

Expression(표현식)

Expression은 변수, 상수, 연산자로 구성되어 항상 결과 값을 반환하는 식을 말한다. a, 10, a + 11.3 등은 모두 유효한 Expression이다.

Constant(상수)

Constant 또는 Literal(리터럴)은 소스 코드에서 사용되는 고정된 자료 값을 의미한다.

  • 정수 Constant: 10(10진수), 017(8진수), 0x17(16진수)와 같이 표현한다.
  • 실수 Constant: 3.14, 32.5E23 (32.5×1023)과 같이 소수점이나 지수 형태로 표현한다.
  • 문자 Constant: 'A', '\n'와 같이 작은따옴표로 묶어 하나의 문자를 표현한다.
  • 문자열 Constant: "대한민국"과 같이 큰따옴표로 묶어 여러 문자의 나열을 표현한다.

대입문

Assignment Operator(대입 연산자) =는 오른쪽 표현식의 결과 값을 왼쪽의 저장 공간(변수)에 저장하라는 의미를 갖는다. 대입 연산자의 왼쪽에는 반드시 값을 저장할 수 있는 변수만 올 수 있으며, 오른쪽에는 값을 생성하는 모든 Expression이 올 수 있다.

출력 함수 printf()

printf() 함수는 문자열, 상수, 변수 등의 값을 화면에 형식에 맞춰 출력하는 C 라이브러리 함수이다. 이 함수를 사용하기 위해서는 전처리기 지시자 #include <stdio.h>를 소스 코드 상단에 포함해야 한다.

printf() 함수의 기본 구조는 printf("Control String", 표현식1, 표현식2, ...); 형태이다.

  • Control String(제어 문자열): 출력될 문자열의 형식을 지정한다. 제어 문자열 안의 \n(줄바꿈), \t(수평 탭)과 같은 특수 문자들은 그대로 출력되지 않고 해당 기능으로 변환되어 적용된다.

  • Conversion Specification(변환 명세): Control String 뒤에 오는 표현식의 값을 어떤 형태로 출력할지 지정한다. % 기호와 특정 문자의 조합으로 이루어진다.

    • %d: 10진수 정수(int)
    • %f: 실수(float)
    • %lf: 배정밀도 실수(double)
    • %c: 문자(char)

    Control String 내부의 Conversion Specification의 순서와 종류는 뒤따르는 표현식들의 순서 및 자료형과 반드시 일치해야 한다.