Chapter 2 C++ 기초 문법

2.1 라이브러리 불러오기

#include <라이브러리 이름>을 통해 C++ 라이브러리를 불러올 수 있다. R에서 library(패키지명)을 사용하는 것과 비슷하다.

#include <RcppEigen.h>
#include <Rcpp.h>

2.2 변수선언

2.2.1 R에서 변수선언

a <- 1       # 정수형
b <- 1.5     # 실수형
c <- TRUE    # 논리형
d <- "Rcpp"  # 문자형

2.2.2 C++에서 변수선언

int a = 1;        // 정수형
double b = 1.5;   // 실수형
bool c = true;    // 논리형
char d = "Rcpp";  // 문자형

C++에서는 항상 코드 줄의 마지막에 ;(세미콜론)을 적어주어야 한다.

2.2.3 미리 선언 후 나중에 값 저장

int a;
a = 100;

R에서는 변수의 자료형을 지정해주지 않더라도 자동으로 자료형을 변환해주는 반면, C/C++에서는 자료형을 확실히 정해주어야 한다.1

2.3 if 문

2.3.1 R에서의 if 문

a <- 10
if (a < 5) {
  print("5보다 작다")
} else if (a < 8) {
  print("8보다 작다")
} else {
  print("8보다 크다")
}

2.3.2 C++에서의 if 문

int a = 10;
if (a < 5) {
  std::cout << "5보다 작다" << "\n";
} else if (a < 8) {
  std::cout << "8보다 작다" << "\n";
} else {
  std::cout << "8보다 크다" << "\n";
}

C++에서 print를 하기 위해서는 C++ 표준 템플릿 라이브러리(STL : Standard Template Library) 내의 std::cout을 이용해야 한다. (Rcpp 내의 Rcpp::Rcout을 이용해도 된다.)

여기서 라이브러리::함수는 라이브러리 내의 함수에 접근한다는 의미로 R에서도 동일하게 사용되는 방법이다. R에서와 마찬가지로 라이브러리명을 제외하고 함수명으로만 사용하는 방법은 Namespace를 활용하는 방법이며 이는 Rcpp 파일의 구조 에서 설명하겠다.

2.4 for 문

2.4.1 R에서의 for 문

for (i in 1:10) {
  print(i)
}

2.4.2 C++에서의 for 문

for (int i = 0; i < 10; i++) {
  std::cout << i << "\n";
}

2.5 while 문

2.5.1 R에서의 while 문

n <- 0
while (n < 5) {
  print(n)
  n <- n + 1
}

2.5.2 C++에서의 while 문

int n = 0;
while (n < 5) {
  Rcpp::Rcout << n << "\n";
  n = n + 1;
}

2.6 함수

2.6.1 R에서의 함수 정의

# 두 실수의 합을 구하는 함수
add <- function(a, b) {
  val <- a + b
  return(val)
}

2.6.2 C++에서의 함수 정의

// 두 실수의 합을 구하는 함수
double add(double a,
           double b) {
  double val = a + b;
  return val;
}

C++에서 함수를 정의할 때 유의해야할 점은 input의 자료형과 output의 자료형을 반드시 명시해주어야 한다는 것이다. 아마 R 사용자에게 가장 익숙치 않은 부분일 것이고, 보통 여기서 에러가 매우 많이 발생한다. 이 부분을 항상 주의하도록 하자!


  1. 위의 4가지 뿐 아니라 실수의 자릿수 등을 더 디테일하게 정할 수 있는 자료형들이 존재하며 이는 많은 블로그들에서 확인할 수 있다.↩︎