프로그래밍은 디버깅이 시간이 오래걸린다.
assert은 디버깅을 컴파일러에게 도움받는 방법이다.
디버그 모드에서만 작동한다.
assert(false)는 에러가 출력된다.
assert(조건) 방식으로 작성한다. 조건에 맞지않으면 오류내용을 출력해준다.
static_assert는 컴파일타임에 결정되는 변수만 사용가능하다.
또, 오류내용 입력이 가능하다.
#include <iostream>
#include <cassert>
#include <array>
using namespace std;
void getArrData(array<int, 5> &arr, const int &idx) {
//콘솔창에 오류내용이 출력된다.
assert(idx >= 0);
assert(idx <= arr.size() - 1);
cout << arr[idx] << endl;
}
int main() {
const int num = 5;
//반드시 맞아야하는 데이터를 입력한다.
assert(num == 5);
//static_assert는 컴파일타임에 결정되는 변수만 저장가능하다.
static_assert(num == 5,"GOOD");
array<int, 5> arr{ 1,2,3,4,5 };
getArrData(arr, 100);
return 0;
}
함수를 구현하다보면 파라미터가 정해져있지 않으면 좋겠다 싶을때가있다.
이때 Ellipsis를 사용한다.
주의할점
파라미터 갯수를 맞춰주어야한다.
타입도 미리 정해주어야한다.
사용하기가 위험하고 디버깅도 어렵다.
고수가 되면 사용하도록 하자!
#include <iostream>
#include <cstdarg>
using namespace std;
double findAverage(int count, ...) {
double sum = 0;
//파라미터로 꺼내올 리스트를 선언한다.
va_list list;
//리스트와 크기를 정해준다.
va_start(list, count);
for (int arg = 0; arg < count; arg++) {
//리스트안에서 값을 꺼내온다.
//intiger로 변환
sum += va_arg(list, int);
}
//리스트를 마무리해준다.
va_end(list);
return sum / count;
}
int main()
{
cout << findAverage(3, 1, 2, 3) << endl;
//사용자가 지정한 카운트와 크기가 안맞으면 문제가 생긴다.
cout << findAverage(100, 1, 2, 3) << endl;
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ 캡슐화,접근지정자,접근함수 (0) | 2019.08.05 |
---|---|
c++ OOP 객체지향 프로그래밍 (0) | 2019.08.02 |
c++ 방어적프로그래밍 기초 (0) | 2019.08.02 |
c++ 재귀적 함수호출 (0) | 2019.08.01 |
c++ vector (size,capacity,reserve) vector를 stack처럼 사용하기 (0) | 2019.07.31 |