본문 바로가기

Programing/C++

[C++] C++ 기초(주석, 전처리 지시자, main()함수, I/O Stream)

728x90
반응형

 프로그래밍언어의 공식 예제 "Hello, World'
 간단한 C++코드를 살펴보자

 

 

 

 

 이코드를 실행하면 화면에 'Hello World'란 메시지를 출현한다.
 여기에 C++형식에 대한 다음과 같은 중요한 개념이 담겨 있다.
  1) 주석
  2) 전처리 지시자
  3) main() 함수
  4) I/O 스트림

// helloworld.cpp
#include <iostream>

int main()
{
	std::cout << "Hello, World" << std::endl;
}

 

 

하나씩 살펴보자 
 1)주석 

  : helloworld.cpp 라고 되어 있는 부분이 주석이다. 

주석은 프로그래머에게만 유용한 메시지로 컴파일러는 이 부분을 무시한다. C++는 2가지 방식으로 표현한다. 
    //을 적으면 그 지점 부터 그 줄 끝까지 나오는 모든 문자를 주석으로 처리한다.
    /* ~ */ 을 적으면 여러줄을 주석 처리 할 수있다.  /*로 시작해서  */로 끝나며, 그 사이의 모든 문자를 주석 처리한다.
  2) 전처리 지시자
  : C++로 작성된 소스코드를 프로그램으로 만드는 build작업은 세 단계를 거친다. 
    ① 먼저 전처리(Preprocess)단계 에서는 소스코드에 담긴 메타 정보를 처리한다.
    ② 컴파일 단계에서는 소스코드를 머신이 읽을 수 있는 오브젝트(목적) 파일로 변환한다.
    ③ 링크 단계에서는 앞에서 변환한 여러 오브젝트 파일을 애플리케이션ㅇ로 엮는다.
  : 지시자(디렉티브)란 전처리기에 전달할 사항을 포현하며, 앞에 나온 예제의 #include <iostream>처럼 #문자로 시작한다.
    여기서 #include지시자는 <iostream> 헤더 파일에 있는 내용을 현재 파일에서 사용 할 수 있게 모두 가져오도록 전처리기에 지시한다.
    헤더파일은 주로 나중에 소스 파일에서 구현할 함수를 선언하는 용도로 사용 된다.
    이러한 함수 선언부는 그함수의 호출 방식, 매개변수의 개수와 타입, 리턴 타입등만 컴파일러에 알려주고 그 함수가 실제로 수행할 동작은
    구현부(정의부)에 작성한다.
    정리하면, C++선언은 확장자가 .h인 헤더파일(header file)에 작성하고, 구현은 확장자가 .cpp인 소스파일에 작성한다. 

 

 

출저 : 책 (전문가를 위한 C++)

 

중복 인클루드를 막는 용도로 전처리 지시자를 사용하는 예는 다음과 같다.

#ifndef MYHEADER_H
#define MYHEADER_H
// 헤더 파일 담을 내용
#endif

 

현재 사용하는 컴파일러에서 #pragma once 지시자를 원한다면 다음과 같이 좀더 간결하게 표현할 수 있다.

#pragma once
// 헤더파일에 담을 내용

 

 

3) main() 함수

프로그램은 항상 main()함수에서 시작한다. main()함수는 int 타입의 값을 리턴하는데, 이 값으로 프로그램의 실행 결과에 대한 상태 표시를 한다. main() 함수 안에서는 리턴 문장을 생략해도 되는데, 그러면 자동으로 0을 리턴한다.

main함수는 매개변수를 받지 않거나, 다음과 같이 두 매개 변수를 바도록 작성할수 있다.

 

int main(int argc, char* argv[])

 

 

argc는 프로그램에 전달할 인수 개수를 지정하고, argv는 전달할 인수의 값을 담는다. argv[0]에는 프로그램 이름이 담기는데, 공백 스트링이 지정될 수도 있어서 프로그램 이름을 참조 하려면 이 값 보다는 플랫폼에서 제공하는 기능을 사용하는 것이 좋다.

여기서 포인트는 실제 매개 변수는 인덱스 1부터 시작한다는 것!

 

4) I/O 스트림

 I/O 스트림(입출력스트림), 입력과 출력에 대한 기본 원리는 굉장히 간단하다. 출력 스트림은 데이터를 나르는 컨베이어 벨트에 비유할 수있다. 컨베이어 벨트는 여러 종류가 있는데, 성격에 맞는 컨베이어 벨트에 데이터를 올려두기만 하면 그대로 출력된다. 

예를 들면,

std::cout 이라는 컨베이어 벨트는 사용자 콘솔(또는 표준 출력)에 출력한다. std::cerr라는 컨베이어 벨트는 에러 콘솔에 출력한다. 여기서 데이터를 컨베이어 벨트에 올리는 작업은 <<연산자로 표현한다.

std::cout << "There are " << 219 << "ways I love you." << std::endl;

 

std::endl은 문장이 끝난다는 것을 의미한다. 이 문장이 나타나면 지금까지 전달한 내용을 모두 출력하고 다음 줄로 넘어간다. 문장의 끝은 \n(이스케이프 시퀀스, 탈출/이탈 문자열) 문자로 표현할 수도 있다.

흔히 사용하는 이스케이프 시퀀스 몇가지 소개하면 다음과 같다.

 

출저  : 책(전문가를 위한 C++)

스트림은 사용자로부터 입력을 받을 떄도 사용한다. 가장 간단한 방법은 입력 스트림에 >>연산자를 사용하는 것이다.

std::cin입력 스트림은 사용자가 키보드로 입력한 값을 받는다.

 

반응형