이 글은 도서 "C++ 기초플러스 6판"과 작성자의 공부 내용을 토대로 작성했습니다.
코드는 Visual Studio Community 2022 프로그램을 통해 작성했습니다.
오타나 지적은 저에게 많은 공부가 됩니다.
- 예제1)
//예제 1 (주석문)
#include <iostream> //전처리 지시자 및 헤더 파일
int main() //main 함수(함수 머리)
{
std::cout << "Hello World!" << std::endl; //명령문 (함수 몸체)
return 0; //반환(return)문
}
//끝
예제1)은 "Hello World!"가 출력되는 간단한 코드를 작성한 C++ 프로그램이다.
이 예제를 통해 프로그램의 구조에 대해 알아보자...
1. 주석문
//예제 1 (주석문)
첫 줄에 작성된 이 코드는 주석문이다.
주석문은 더블슬래시(//)로 시작하며 이후에 쓰이는 해당 줄의 문자를 모두 일컫는다.
컴파일러는 모든 주석문을 무시하고 컴파일을 하게 된다.
(* 컴파일이란 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다. 그리고 이것을 자동으로 수행해 주는 소프트웨어가 컴파일러.)
주석은 프로그래머들이 코드를 짜면서 기록해두는 일종의 메모로 알면 된다.
프로그램을 구분하거나 코드의 역할을 표시하는 등 다양한 용도로 사용할 수 있다.
/*, */ 형식으로도 나타낼 수 있다. 아래 예제를 보자.
/*
주석 예제
*/
위 예제와 같이 쓰면 /* 부터 */까지의 줄을 모두 주석 처리 할 수 있다.
해당 예제에서 알 수 있다시피 /*, */ 형식은 한 줄 이상의 주석문을 쓰고 싶을 때 쓰면 된다.
코드를 쓰다 보면, 해당 코드의 역할이 뭐였는지 잊을 때가 종종 발생하기에 주석문을 쓰는 것이 중요하다.
또한, 주석을 쓰면 본인이 아닌 다른 사람이 봤을 때 이해가 더 빨리 된다.
나중에 협업할 때를 대비해서라도 주석을 쓰는 습관을 들이도록 하자.
2. 전처리 지시자 및 헤더 파일
#include <iostream> //전처리 지시자 및 헤더 파일
위 줄에 쓰인 코드는 전처리 지시자(#include)와 헤더 파일(<iostream>)로 구성된 코드다.
C++의 다양한 명령 기능들을 사용하기 위해선 헤더 파일을 불러와야 한다.
전처리 지시자 #include는 헤더 파일을 코드에 포함시킬 때 사용한다.
전처리 지시자는 #include뿐만 아니라, #으로 시작되는 모든 명령을 말한다.
전처리기에게 컴파일을 하기 전에 코드 파일에 대한 특정 명령(전처리 지시자)을 처리하기 위해 쓰인다.
(*전처리기는 프로그램을 컴파일을 하기 직전에 코드 파일에서 전처리 지시자의 명령을 수행하는 프로그램이다.)
헤더 파일 <iostream>은 C++의 입출력기능을 포함하고 있다.
<iostream> 헤더 파일은 입출력 함수를 포함하고 있다.
예제1에선 출력기능을 사용하기 위해 아래에서 언급할 std::cout 함수를 사용했는데, 이 함수를 사용하기 위해 <iostream> 헤더 파일을 불러 온 것이다.
헤더 파일을 불러올 때 <,>가 아닌 ","(쌍따옴표)를 사용하는 경우도 있다. 아래 예제를 보자.
#include <iostream>
#include "iostream"
첫 줄의 코드는 우리가 아는 일반적인 전처리 지시문이다.
하지만 두 번째 줄의 코드는 <,> 대신 ","를 사용한 것을 볼 수 있다.
무슨 차이일까?
#include <헤더 파일>
-컴파일러가 설치된 폴더에서 해당 헤더 파일을 찾을 때 <,>를 쓴다.
예제에서 쓴 iostream의 헤더 파일은 컴파일러와 같은 폴더에 위치해 있기 때문에 위와 같이 작성하는 것이다.
#include "헤더 파일"
-사용자가 작성하는 소스가 있는 폴더, 혹은 프로젝트 폴더에서 헤더 파일을 찾으라는 표기다.
사용할 헤더 파일이 위치한 경로에 맞게 <,> 와 ","을 사용하도록 하자.
3.함수 머리
예제1)의 코드를 5번째 줄부터 보기 편하게 간략화하면, 아래와 같이 된다.
int main() //main 함수(함수 머리)
{
구문들; //명령문 (함수 몸체)
return 0; //반환(return)문
}
주석에도 친절하게 설명되어 있지만, 첫 번째 줄은 함수 머리다.
함수 머리는 해당 함수를 프로그램의 다른 부분과 연결 해주는 연결 고리 역할을 한다.
함수의 구조는 반환(return) 타입, 함수명, 매개 변수, 함수 몸체로 이루어져 있다.
위 코드를 예로 들어 보면,
반환 타입 (int) - 함수 명 (main) - 매개 변수 ( 괄호 안 ) - 함수 몸체 ( {중괄호 안의 명령문} )
으로 이루어져 있다. 먼저 반환값부터 보자.
반환 타입이란, 반환(return) 되는 값의 자료형을 말한다.
앞의 예제에서 main() 함수는 int를 보고 정수값을 리턴한다는 사실을 알 수 있다.
(int는 32bit(4byte)의 정수형 자료형이다. 자료형에 관해선 이후 다룰 예정.)
함수 명은 자신이 쓸 함수를 구분하기 위해 지어주는 이름이다.
매개 변수(parameter)란, 함수 몸체에 전달받은 인수(argument)의 값을 전달하기 위해 사용되는 변수다.
여기서 인수(argument)는 함수가 호출될 때 함수의 매개변수로 전달해 주는 값을 말한다.
함수 몸체는 아래에서 설명을 이어나가겠다.
아래 예제는 사용자 정의 함수를 작성해본 예제다. 너무 무거운 주제지만 이해하면 좋으므로 한 번 봐보자.
위 코드의 출력은 몇일까?
정답은 3이다.
지금부터 왜 3이 나왔는지 알아보자...
아래 사진을 보자.
사진을 보면 알 수 있듯이, 각각의 함수 taku와 main이 정의되어 있다.
자세한 건 나중에 설명하겠지만, 간단히 설명해 보겠다.
먼저 main() 함수는 프로그램이 실행될 때 가장 먼저 호출되는 함수다.
9번째 줄의 int A = taku(1,2);를 봐보자.
main 함수의 내에서 taku(int x, int y) 함수를 호출한 것이다.
그럼 taku 함수의 매개변수는 int x와 int y는 사진과 같이 각각 1, 2의 인자 값을 받는다.
그리고 5번째 줄의 return x + y;를 통해 1+2(=3)의 값을 main() 함수 내의 int A값에 반환한다.
10번째 줄의 std::cout << A << std::endl; 출력문을 통해 출력값이 3이 된다.
사용자 정의 함수에 대해선 나중에 더 자세히 다루도록 하겠다.
4.함수 몸체
함수 몸체는 함수 머리 부분 이후의 { }(중괄호)로 묶여 있는 부분이다.
함수 머리는 해당 함수에게 프로그램의 다른 부분과 연결하는 고리 역할을 한다면, 함수 몸체는 해당 함수가 처리해야 할 동작을 컴퓨터에게 지시하는 역할을 한다.
컴퓨터에게 내리는 지시를 구문(statement)라고 하는데, C++의 모든 구문은 ;(세미콜론)으로 끝나야 한다.
함수 몸체에서는 다양한 구문이 쓰일 수 있는데, 예제에서 쓰인 코드를 보자.
std::cout << "Hello World!" << std::endl; //명령문 (함수 몸체)
위 코드는 컴파일러에 Hello World!를 출력시킨 후 개행(ENTER)하는 역할을 한다.
그 외에 다양한 구문들이 있지만 다음에 설명하겠다.
5.반환(return)문
반환문은 함수의 끝을 의미한다.
함수를 호출한 곳으로 반환값을 반환해 준다.
아래 예시처럼 작성하면 된다.
return 반환값;
아래 예제는 위에 함수 머리에서 설명한 사용자 설정 함수의 예제를 다시 가져와 본 것이다.
사진에서 보다시피 taku 함수의 반환값은 x+y다.
인자값 1과 2를 받아서 A의 값에 3을 반환해 주는 것이다.
앞서 말했듯이, 반환문은 함수의 끝을 의미한다.
하지만 main() 함수가 반환되는 것은 프로그램이 종료된다는 것을 의미한다.
main() 함수는 나중에 자세히 다루겠다.
글 읽어주셔서 감사합니다.
'프로그래밍 > C++' 카테고리의 다른 글
[C++] static, 근데 class를 곁들인 (0) | 2024.06.11 |
---|---|
[C++] 헤더를 미리 컴파일 하는 방법 (0) | 2024.04.11 |
[C++] sprintf_s()를 사용해 실수와 정수를 문자열에 담기 (0) | 2024.04.08 |
[C++] precision() 소수점 자리를 제한하여 출력하기 (0) | 2024.03.10 |
[C++] 변수 (0) | 2023.11.28 |