반응형

static_assert 2

[C11] 컴파일 타임 오류내기, static_assert

assert() 자주 사용하시나요? 프로그램에서 런타임 오류를 잡아내고 예외를 처리하는데 쓰이죠. ​ 하지만 컴파일 타임에 예외가 있으면 컴파일이 안 되게 만드는, 정적 어설션은 이보다 더 유용할 때가 많습니다. C++에서 static_assert() 키워드를 도입했듯이, C언어에서도 static_assert()를 지원합니다. ​ 물론 C++처럼 네이티브로 지원하는 것은 아니고, 헤더를 하나 포함하거나 살짝 다른 예약어를 사용해야 합니다. _Static_assert(식, 문자열) (C11 예약어) _Static_assert(식) (C2x) #include // 를 하면 static_assert(식, 문자열) // 이렇게 작성해도 됩니다. #include int main() { static_assert(1..

[C++11] 템플릿으로 배열을 함수에 넘기기

C언어에서, 배열을 함수로 전달하려면 어떻게 해야 했죠? 네. 맞습니다. 바로 포인터를 이용하는 것인데요, void func(int arr[], int size); void func(int *arr, int size); 위와 같이 arr은 포인터 (첫번째줄도 사실 포인터입니다) 로 받고, 배열의 크기는 알 수 없으므로 따로 정수형의 size매개변수를 따로 받았죠. 하지만 이 방식에는 단점이 있습니다. 일단 배열의 사이즈를 모르기 때문에 직접 size로 넘겨야하는 게 가장 큰 문제인데요, ​ C++에서는 템플릿을 통해 문제를 해결합니다. template void func(int (&arr)[N]); 다른 타입을 받고 싶다면 int부분을 수정해주면 됩니다. int (&arr)[N]이 생소하실 수 있는데, 하..

C++ 2020.03.21
반응형