여기에 코드입니다 : 오류가있는 경우 R로를 소스로 사용한 후여기서 어설 션이 작동하지 않는 이유는 무엇입니까?
#include <Rcpp.h>
#include <iostream>
#include <assert.h>
#include <stdio.h>
using namespace Rcpp;
// [[Rcpp::export]]
double eudist(NumericVector x, NumericVector y) {
int nx = x.size();
int ny = y.size();
std::cout << nx << '\n' << ny << std::endl;
assert(nx == ny);
double dist=0;
for(int i = 0; i < nx; i++) {
dist += pow(x[i] - y[i], 2);
}
return sqrt(dist);
}
, 나는 다음과 같은 결과를 얻을, 분명히 그것은 중단하지 않습니다에 -g 사용 ++ g를 들어
#////////////////////////////////////////////////////
sourceCpp('x.cpp')
#////////////////////////////////////////////////////
eudist(c(0, 0), c(1, 1))
2
2
[1] 1.4142
#////////////////////////////////////////////////////
eudist(c(0, 0), c(1, 1, 1))
2
3
[1] 1.4142
어떻게 컴파일하나요? 'NDEBUG'를 정의하면'assert'가 전 처리기에 의해 제거됩니다; 아마 그 일이 일어날거야. –
'throw()'로 전환하기위한 세 가지 환호와 upvote, –
아, 그리고 stickler가되기 위해서 : R 's I/O 버퍼에 쓰려면'std :: cout' 대신'Rcpp :: Rcout'을 사용하십시오. –