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 사용자에게 가장 익숙치 않은 부분일 것이고, 보통 여기서 에러가 매우 많이 발생한다. 이 부분을 항상 주의하도록 하자!
위의 4가지 뿐 아니라 실수의 자릿수 등을 더 디테일하게 정할 수 있는 자료형들이 존재하며 이는 많은 블로그들에서 확인할 수 있다.↩︎