728x90

간단한 코드의 구조

 지난 포스팅에서 살펴봤던 코드의 구조를 파악해보자.

#include <stdio.h>

int main(void)
{
	printf("Hello World!");
	return 0;
}

 

이렇게 특정 언어로 작성된 텍스트 파일을 소스 코드라고 한다.

다음과 같은 코드를 크게 세 부분으로 구분해보자.

 

 

 1. 지시자

#include <stdio.h>

 

기억나실지 모르지만, 이전 포스팅에서 # 으로 시작하는 것은 전처리 지시문이라고 하였다.

 # 이라는 특수 기호로 시작하는 문장은 지시자 라고 한다.

 

 프로그램이 컴파일 되기 전에 처리되어야 할 작업들을 지정해준다고 보면 된다.

 해당 코드 #include <stdio.h>C언어의 표준 입출력 라이브러리를 가리키는 헤더 파일로 해당 라이브러리의 정보들을 포함하겠다 라는 의미이다. 웬만한 프로그래밍에는 항상 쓰이는 라이브러리이다.

 

 헤더 파일이란 주로 외부 소스 파일에 미리 정의된 정보들을 가져다 쓰기위해 만들어진 파일이다. 확장자명은 (.h) 이다.

 

 

 2. 함수

int main(void)
{

}

 

 함수는 수학시간에 익히 들어본 개념일 것이다.

 입력이 함수를 거쳐 특정한 출력이 나오도록 하는 것이 우리가 익히 알고있는 함수의 개념이다.

 

 C언어에서는 함수를 이렇게 정의한다.

 자료형에 대해 알아본 후에 더 자세히 다루겠다.

 간단히 int 부분은 출력의 형태, main 부분은 함수명, 괄호에 씌여진 void 는 입력의 형태라고 보면 된다.

 

 함수명은 중복되지 않게 여러 함수를 만들 수 있지만, main 이라는 이름을 가진 함수는 특별하다.

 소스 파일에 무조건 하나만 존재할 수 있으며 소스 코드의 근간이 되는 함수라고 보면 된다.

 따라서 우리가 작성할 코드는 모두 main 함수의 괄호 내에 작성된다.

 우리는 이 때 main 함수를 정의하고 있다고 한다.

 

 

 3. 구문

printf("Hello World!");
return 0;

 

 마지막으로 구문이다.

 우리가 주로 작성할 소스 코드들에 해당하는 부분이다.

 참고로 중괄호 내에서 문장 앞 공백을 확인할 수 있는데 이는 Tab키통상적으로 띄어쓰기 4칸 정도이다.

 두 줄에서 볼 수 있듯이 구문 부분에서 문장의 끝에는 세미콜론(;)이 붙어야 컴파일러가 문장이 끝났다고 인식한다.

 

 우리는 printf ~ 부분이 Hello World 라고 출력되게끔 하는 문장임을 눈치챌 수 있다.

 printf 부분 또한 괄호 안에있는 "Hello World!" 가 입력값으로 들어간 함수이다!!

 printf() 라는 함수가 바로 지시문에 있던 <stdio.h> 라는 C언어 표준 입출력 라이브러리에 포함된 함수이다.

 만약 처음의 지시문 없이 이 문장을 작성했다면, 오류가 발생할 것이다.

 

우린 이렇게 정의된 함수를 사용하는 것을 호출이라고 한다.

 코드가 실행될 때 가장 먼저 main 함수 호출되는 원리이다.

 

 return 0; 의 return 은 말 그대로 반환을 뜻하는 키워드이다.

 그대로 해석하면 '0 이라는 녀석을 반환해라' 라는 뜻이다.

 각 문장이 끝났을 때 세미콜론(;)을 붙이는 것처럼 모든 함수는 마지막 부분에 return문을 통해 함수의 결괏값을 호출한 곳으로 반환한다.

 


 

간단한 도식화

hello.c 가 실행되는 원리

 

 이렇듯 C 프로그래밍은 다음과 같은 과정이 다중적으로 이루어진다고 보면 된다.

 ② 함수를 정의 -> ③ 함수를 호출 -> ⑤ 절차적 실행 -> ⑥ 함수의 결과 반환

 

 우린 이렇게 함수를 정의하고 호출하며 재사용성을 늘려 효율적인 명령 수행을 시키도록 코딩 작업을 해야하는 것이다.

 이러한 함수를 메소드(method), 루틴(routine), 서브루틴(subroutine) 이라고도 하며 이러한 작업 개념을 통틀어 프로시저(Procedure) 라고 한다.

 C언어는 프로시저(Procedure) 를 활용하는 것이 본질이기에 C언어를 명령형 프로그래밍 패러다임(Procedural Programming Paradigm) 언어라고 하는 것이다.

 

[Lang] 프로그래밍 언어란?

프로그래밍 언어(Programming Langauge) 란?: 컴퓨터(기계)에게 명령하거나 의사소통을 할 수 있게 해주는 언어이자 도구  프로그래밍 언어는 다음과 같이 구분되며 보통 컴파일러(Compiler)나 인터프리

devcrl.tistory.com

C언어 소개 참고

 


 

 깊다면 깊게 간단하다면 간단하게 설명한 것 같아요.

 이해하기 힘든 부분도 많겠지만 매커니즘을 이해하는 것이 중요하다고 봅니다.

 후에 다룰 내용도 유기적으로 이어질 것입니다~!

728x90

'언어 > C' 카테고리의 다른 글

[C-2] C 프로그램의 구조  (0) 2025.02.20
[C-1] 개발 환경 구축  (2) 2025.01.20
728x90

Hello World!

 제목처럼 간단히 Hello World! 라는 문자열을 출력하는 프로그램을 짜보자.

 우선 코드를 제공할테니 분석을 해보자.

 

 다음 코드의 파일명은 hello.c 라고 하자.

 C언어로 만든 텍스트 파일이자 코드이므로 확장자명이 .c 이다.

#include <stdio.h>

int main(void)
{
	printf("Hello World!");
	return 0;
}

 

 이렇게 입력한 후 프로그램을 실행시키면 Hello World! 라는 문자열이 출력된다.

 코드를 분석하기 전에, 프로그램은 어떻게 실행시키는 걸까?

 


 

실행 과정

 실행 과정을 알아보기 전에 본인이 사용하는 개발 환경이 무엇인지 점검해보자.

 

[L2-8] C 언어 (개발 환경 구축) - 1

C 언어?: 1972년 벨 연구소의 Dennis Ritchie가 개발한 프로그래밍 언어로 현대 프로그래밍 언어의 기초 주요 특징절차적 프로그래밍 언어 : 프로시저(함수) 단위로 프로그램을 구성가벼움 : 시스템

devcrl.tistory.com

 

 본인이 사용 중인 개발환경이 Visual Studio 와 같은 통합 개발 환경이라면 실행하는데 어려움이 없을 것이다.

 하지만 Clang 이나 GCC 와 같은 기본 컴파일러 같은 경우에는 C파일을 작성 후 바로 실행시키지 못할 것이다.

 

 참조한 글에서 볼 수 있듯 컴파일을 해야한다는 것인데 사실 C파일의 실행 과정은 네 단계로 나뉜다.

 

  1. 전처리 (Preprocessing)
    • 전처리 지시자 ( # ) 로 시작하는 전처리 지시문을 처리
    • .i 확장자를 가진 전처리된 파일이 생성됨
    • 헤더 파일 포함, 매크로 확장, 조건부 컴파일 처리
  2. 컴파일 (Compilation)
    • 전처리된 파일 ( .i ) 을 받아 C 텍스트 코드를 어셈블리 코드로 변환
    • 구문 분석, 최적화 등이 이루어짐
    • .s 확장자를 가진 어셈블리 파일이 생성됨
  3. 어셈블 (Assembly)
    • 어셈블리 파일 (.s) 을 기계어(오브젝트 코드) 로 변환
    • .o 또는 .obj 확장자를 가진 오브젝트 파일 생성
  4. 링크 (Linking)
    • 여러 오브젝트 파일 (.o) 과 라이브러리 파일을 결합하여 최종 실행 파일 생성
    • 외부 참조 해결, 메모리 레이아웃 결정
    • .exe 또는 실행파일이 생성됨

 

 매우 복잡해 보인다. 무슨 소린지 모르겠는 설명도 있지만 이해하지 못해도 지금은 큰 상관이 없다.

 적어도 이런 과정을 통해 특정 언어로 작성한 텍스트 파일이 실행 파일이 된다는 것만 기억하자.

 

 기본 컴파일러를 사용할 때에는 이전 포스팅에서 확인할 수 있듯 실행파일을 만드는 명령어가 있고,

IDE를 사용한다면 실행 시 이러한 모든 과정이 자동으로 이루어지고 강력한 디버깅 기능 또한 제공된다.

 


 

디버깅 (Debugging)

: 프로그램의 오류(버그)를 찾아 수정하는 과정.

 프로그램이 의도한 대로 동작하지 않을 때 문제 원인을 파악하고 해결하는데 필수적.

 

  • 목적 : 논리적 오류, 런타임 오류, 메모리 문제 등 해결
  • 도구 : 디버거 (GDB, Visual Studio Debugger 등), printf 디버깅, Valgrind(메모리 검사)
  • 과정
    1. 문제 재현
    2. 중단점 (break point) 설정 후 단계별 실행 (Step Into/Over/Out)
    3. 변수 및 메모리 상태 확인
    4. 오류 수정 및 테스트

 강력한 기능을 제공하는 IDE 는 코드 작성 중 실시간으로 디버깅을 해주기도 한다. (런타임 제외)

 따라서 간단한 컴파일러나 편집기를 사용한다면 별도로 디버거를 사용해야 하니 IDE를 사용하는 것을 추천한다.

 


 

 C 프로그래밍의 간단한 예시와 구조에 대해 알아보았습니다.

 다음으로는 예시 코드를 자세히 분석해보겠습니다.

728x90

'언어 > C' 카테고리의 다른 글

[C-3] C 코드의 구조  (0) 2025.02.22
[C-1] 개발 환경 구축  (2) 2025.01.20
728x90

C 언어?

: 1972년 벨 연구소의 Dennis Ritchie가 개발한 프로그래밍 언어로 현대 프로그래밍 언어의 기초

 

주요 특징

  • 절차적 프로그래밍 언어 : 프로시저(함수) 단위로 프로그램을 구성
  • 가벼움 : 시스템 리소스를 적게 소비하는 언어. 속도가 빠르고 하드웨어(기계)와 밀접한 작업이 원활
  • 이식성 : 다양한 플랫폼에서 실행 가능하도록 설계
  • 심플한 구조 : 적은 양의 코드 대비 다양한 메소드나 기능를 포함하도록 설계된 타 언어들에 비해 길 수는 있어도 단순한 문법 구조와 강력한 기능을 제공

주요 사용처

  • 운영 체제 (OS)
  • 임베디드 시스템
  • 시스템 소프트웨어 및 드라이버 개발
  • 게임 엔진 및 성능 중심의 앱
 

[L1-4] 프로그래밍 언어란?

프로그래밍 언어(Programming Langauge) 란?: 컴퓨터(기계)에게 명령하거나 의사소통을 할 수 있게 해주는 언어이자 도구  프로그래밍 언어는 다음과 같이 구분되며 보통 컴파일러(Compiler)나 인터프리

devcrl.tistory.com

C언어에 대한 부가적인 설명 참고

 


 

개발 환경 구축

 항상 개발을 시작하려면 개발 환경을 잘 구축해야 합니다.

 농사를 지으려면 농장을 잘 마련해 두어야하는 것 처럼 말이죠.

 개발 환경은 C 코드를 작성하고 실행 가능한 프로그램으로 변환하는데 필요한 도구와 소프트웨어들을 포함합니다.

 

 

[C2-6] 컴퓨터 시스템의 구성 (1)

컴퓨터의 기본 구성하드웨어(Hardware) : 컴퓨터에서 정보에 대한 처리가 실제로 일어나게 하는 물리적 실체소프트웨어(Software) : 정보들에 대한 처리를 지정해주는 명령들의 집합 혹은 무형물을

devcrl.tistory.com

소프트웨어에 대한 설명 참고

 


 

개발 환경의 구성 요소

  1. 코드 에디터(Editor) : C 언어 코드를 작성할 수 있는 도구
    • Visual Studio (Code) , Notepad++, Sublime Text ...
  2. 컴파일러(Compiler) : C 언어 코드를 기계어로 변환해주는 프로그램. 컴파일 과정을 통해 실행 파일로 변환.
    • GCC(GNU Compiler Collection), Clang , MSVC(Visual Studio 의 컴파일러) ...
  3. 디버거(Debugger) : 프로그램 실행 중 발생하는 오류를 찾고 수정하는 도구
    • GDB(GNU DeBugger) , Visual Studio 내장 디버거 ..
  4. IDE(통합 개발 환경) : 코드 작성 , 컴파일 , 디버깅을 한 곳에서 처리할 수 있는 소프트웨어
    • Visual Studio (Code) , Eclipse , IntelliJ ...

 


 

개발 환경 구축 방법 - 1  [ Visual Studio ]

Microsoft사의 IDE인 Visual Studio Community 버전을 설치하여 사용하는 방법

 

 

Visual Studio Tools 다운로드 - Windows, Mac, Linux용 무료 설치

Visual Studio IDE 또는 VS Code를 무료로 다운로드하세요. Windows 또는 Mac에서 Visual Studio Professional 또는 Enterprise Edition을 사용해 보세요.

visualstudio.microsoft.com

Microsoft 공식 홈페이지

 

가장 추천드리는 방법입니다.

사용 중인 OS가 Windows , MacOS 인 경우에만 가능한 방법입니다.

주로 Windows에 초점이 맞춰져있습니다.

자세한 설치 방법이나 설치 중 오류는 추가적으로 검색해보시거나 댓글로 질문주세요.

 


 

개발 환경 구축 방법 - 2  [ Clang ]

MacOS 운영 체제에 기본으로 제공되어있는 컴파일러입니다.

텍스트로 소스 코드를 작성 후 터미널(Terminal) 창에서 다음과 같은 명령어로 컴파일이 가능합니다.

clang <source_filename>.c -o <output_filename>

 

컴파일 명령어

 

./<output_filename>

실행 명령어

 

MacOS 에서 사용하시는 것을 권장드립니다.

다만 코드 에디터가 별도로 없다는 불편함이 있어 IDE 사용을 추천드립니다.

 


 

개발 환경 구축 방법 - 3  [ GCC ]

대부분의 Linux 배포판에 기본으로 포함되어 있는 컴파일러이며, Windows 에서도 별도 설치 후 사용 가능합니다.

텍스트 편집기(nano, vi ..) 를 통해 작성한 소스 코드를 터미널(Terminal) 창에서 다음과 같은 명령어로 컴파일합니다.

gcc <source_filename>.c -o <output_filename>

컴파일 명령어

 

./<output_filename>

실행 명령어

 

Linux 운영 체제 사용자 분들은 대부분 GCC를 사용하실 겁니다.

마찬가지로 코드 에디터가 별도로 없고 디버거가 없어 사용에 불편하실 것으로 예상됩니다.

Linux 사용자 분들은 대부분 Visual Studio Code 를 사용하여 GCC와 연동하여 사용하실 겁니다.

 


 

 개발 환경 구축은 항상 처음이 복잡하게 느껴질 수도 있고 실제로 수고스럽습니다.

 하지만 안정적이고 편리한 개발 환경 구축이 여러분의 개발을 더욱 효율적이게 만들 것입니다.

 설치 과정까지 다 담진 못해 아쉽습니다. 부디 추가적인 정보는 검색해보시고 설치하시기 바랍니다.

 PATH , 환경변수와 관련된 설명은 부디 유심히 읽어보시고 주의해서 설치해주세요.

728x90

'언어 > C' 카테고리의 다른 글

[C-3] C 코드의 구조  (0) 2025.02.22
[C-2] C 프로그램의 구조  (0) 2025.02.20

+ Recent posts