반응형

c++ 21

[C++심화 강좌] C++20 모듈 사용하기

환영합니다, Rolling Ress의 카루입니다. ​ 처음에는 무척 기다렸고 신기한 기능이었는데, 막상 추가가 되니까 생각보다 별 감흥이 없네요. 아니면 요즘 제가 UWP 앱 개발 중이라 C#에 너무 에너지를 쏟고 있는 탓인지도 모릅니다. 비주얼스튜디오에서 C#을 사용할 땐 정말 막강한 인텔리센스를 제공하죠. ​ 그래서 말인데, 오늘 할 얘기도 인텔리센스에 관해 먼저 이야기하겠습니다. 우선 몇 년 전과는 달리 최근에는 모듈 지원이 대폭 강화되면서 ixx 파일에 대한 인텔리센스도 제공이 됩니다. 심지어 모듈을 import 한 후에도 인텔리센스가 되긴 되는데, 클래스 내부 멤버들까지는 모르는 것 같아요. 컴파일은 잘 되는데 소스 편집기에서 빨간 줄이 사라지지 않는 요상한 상황이 발생합니다. ​ 아무튼, 아실..

카루가 프로그래밍 언어를 만든다면? Ola 언어 소개

프로그래밍을 하면서, "아, 내가 한 번 프로그래밍 언어를 만들면 어떨까?" 라는 생각을 한 번이라도 하셨나요? 그렇다면 반갑습니다. 저도 그래요. ​ C/C++/Go언어를 맛보면서, 이들만의 장점을 합치면 정말 어마어마한 언어가 탄생할 것 같았습니다. 물론 그게 말처럼 쉽진 않지만, 일단 제가 작성한 컨셉 사진들을 봐 주세요. ​ 말 그대로 "컨셉"입니다. 실제로 존재하는 프로그래밍 언어가 아닙니다! Ola 언어의(Over LAnguage) 기능을 간단하게 소개합니다. 더 간단해진 main() 함수, var/ptr/ref/arr/func/type 키워드, 향상된 for문, 쉬운 주석, 헤더 없는 print/scan 연산자, 그리고 C/C++/C#/Go의 편리한 기능 탑재 등등이 있는데요, 일단 하나하나..

기타 2021.05.13

[C++17] 템플릿 인자를 생략한다? Deduction Guide

​1부터 10까지 저장하는 배열을 하나 생성해보죠. int nArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 아니면 간단히 int arr[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // C++11에는 중괄호를 두 번씩 써야 함: {{1, 2, 3 ... 10}} std::array array{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 그런데, 자료형이 모두 int이고 그 개수가 10개라는건 뻔히 알 수 있습니다. 굳이 이 필요할까요? ​ 그래서 C++17에서는 Deduction Guide라는 것을 사용합니다. 만약에, 우리가 어떤 (템플릿) 클래스를 만드는데, 생성자의 매개변수가 문자열일때, char*가 아닌 std::string으로 받..

C++ 2020.03.21

[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

C++17 주요 기능 정리 (1) - 유용한 기능 편

이 글의 모든 예제 코드는 C++17 이상에서만 동작합니다. (GCC 7-8, MSVC 19.14) Nested namespace definition 중첩 네임스페이스 정의 만약 여러분이 outer라는 네임스페이스를 만들고 그 안에 inner라는 네임스페이스를 만든다면 namespace outer { namespace inner { // 어쩌구 저쩌구 } } 일반적으로 이렇게 작성하시겠죠, 하지만 이렇게 두줄이나 낭비할 필요가 있을까요? outer 네임스페이스는 inner 네임스페이스를 제외하면 '빈공간' 입니다. 굳이 중괄호를 두번씩 쓸 필요가 없겠죠. C++17에는 Nested namespace definition이 있습니다. namespace outer::inner { // 어쩌구 저쩌구 } 훨씬 ..

C++ 2020.03.21

[카루의 C++ 강좌] 1-1. C++ 프로그램의 시작, main() 함수

C++ 프로그램에서, main() 함수는 특별한 존재로 취급받고 있습니다. 프로그램에 단 하나만 존재해야 하며, 반환값은 int이고 프로그램이 실행할 때 가장 먼저 실행되는 함수이죠. (물론 이 말은 틀립니다.. 전역 클래스의 ctor가 더 먼저 실행이 되지만..) ​ 저번 시간에 봤던 이 코드, 기억하시나요? #include int main() { std::cout

반응형