본문 바로가기

반응형

C/C++

(66)
[C++20] 람다 표현식의 변화 들어가며 이번 포스트에서는 C++20의 람다 표현식에 추가된 사항들을 살펴 볼 것이다. 간략하게 요약하면 아래 다섯 가지 정도로 정리 할 수 있다 : 템플릿 람다 추가 : 람다 표현식에서 템플릿 사용 가능 평가 되지 않은 표현식(unevaluated expression)에서 람다 표현식 사용 가능 캡쳐를 사용하지 않는 람다 표현식에서 디폴트 생성자와 대입 연산자 사용 가능 암시적인 this 캡쳐가 컴파일 시 경고 처리 됨(앞으로 deprecated 될 것이라고 경고) Parametaer Pack 캡쳐 가능 템플릿 람다 표현식(template lambda expression) 처음 살펴 볼 변경 사항은, C++20 부터 람다 표현식에도 템플릿의 사용이 가능해졌다는 것이다(기존 C++17까지는 람다 표현식에..
[C++20] 신규 기능 정리 새로운 문법 지원 콘셉(Concept) - 타입 오버라이딩을 넘어선 타입 속성에 따른 강력한 오버라이드 [C++20] 콘셉(Concept) 코루틴(Coroutine) [C++20] 코루틴(Coroutine) [C++20] 코루틴(Coroutine) - co_await [C++20] 코루틴(Coroutine) - co_yield [C++20] 코루틴(Coroutine) - co_return [C++20] 코루틴(Coroutine) - done() 모듈(Module) [C++20] 당신이 C++20에서 모듈을 써야만 하는 이유(#include와 모듈의 비교) [C++20] 모듈(module) 예제 상수성 지원 : constinit, consteval UTF-8 문자열 지원 : char8_t 신규 std 라이..
[C++/C#] CSV 파일 읽기 요즘 집에서 혼자 게임을 만들어 보려고 이것 저것 만지작 거리는 중이다. 게임의 메타데이터(아이템 정보, 몬스터 스탯, 퀘스트 같은 것)들을 엑셀로 관리하고 결과물을 csv 파일로 저장해서 사용할 예정이었다. 하지만... 언제나 그랬듯이 잘 되지 않는다. 요약 거두 절미하고 요약 부터 간다. 인터넷에서 검색 되는 대부분의 CSV 파일 읽기 프로그래밍 예제들은 콤마 대한 이스케이프 처리를 누락하고 있어 CSV 본문에 콤마를 사용 할 수가 없거나, 사용한다면 컬럼 개수가 늘어나 버리는 오류가 있다.이번 포스트에서는 엑셀에서 작성한 UTF8 인코딩 된 csv파일을 읽는 프로그램을 만들 때 흔히 놓치기 쉬운 부분을 살펴 보도록 한다. 엑셀에서 UTF8 csv 파일을 저장하면 UTF8-BOM(파일 앞에 3바이트가..
왜 내 TCP는 믿을 수 없을까? TCP는 정말 신뢰성을 보장해주는 프로토콜일까? 정말 책에 쓰인대로 내가 보낸 모든 데이터들은 상대방에게 신뢰성 있게 잘 도착할까? 라는 궁금증을 가지고 인터넷을 검색하던 중 우연히 "bert hubert finally blogs" 의 "The ultimate SO_LINGER page, or: why is my tcp not reliable"라는 흥미로운 글을 발견하여 짧은 영어 실력으로나마 번역을 시도해 보았다. 번역 중간중간 새로 알게 된 지식이나 보충 설명은 주석으로 추가하였으니 읽으면서 참고 부탁드린다. 원문이 궁금하신 분은 다음 링크를 따라가면 영문 버전을 볼 수 있다. https://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger..
eclipse 에서 stl에 있는 내용 보기(How can I inspect the contents of STL containers?) 이클립스 CDT 디버거를 통해 C++ STL 컨테이너의 내용을 보면 한눈에 봐서는 알 수 없는 난해한 구조와 값들로 가득차 있다. 하지만 pretty-printing을 통해 std::map, std::list, std::vector 등의 컨테이너 안에 있는 내용을 보다 가독성이 높은 형태로 볼 수 있다. 본 포스팅은 http://wiki.eclipse.org/CDT/User/FAQ#How_can_I_inspect_the_contents_of_STL_containers.3F 에서 제공하고 있는 내용을 한글로 간단하게 번역하고 적용하면서 겪었던 몇몇 참고 사항을 추가했다. 보다 정확한 정보를 원하시는 분은 위 링크를 직접 확인해 보시는 것도 좋은 방법이다. Pretty-printing 요구사항 : - GDB..
Lex & Yacc Tutorial 들어 가기 전에.. 이 문서는 Lex & Yacc를 처음 시작하려는 분께 도움이 될만한 내용입니다. C/C++, 정규표현식, BNF에 대한 기본적 지식을 알고 있다는 가정하에 쓰여 졌습니다. 아래에 사용된 예제 코드의 추가 정보는 아래 링크에서 확인 가능합니다. Lex & Yacc를 이용한 프로젝트 메뉴얼 : [도구의발견] - [idlc] 객체 직렬화(Object Serialize) 컴파일러 Lex & Yacc를 이용한 프로젝트 소스(Github) : https://github.com/ChoiIngon/gamnet/tree/master/idlc 1. Lex & Yacc 의 목적 일반적으로 Lex & Yacc는 컴파일러 또는 인터프리터를 만들기 위해 많이 사용되어지고 있다. Lex & Yacc 는 독립된 ..
[C++] 구글 인앱 결제 영수증 서버 검증 (Server side Google Play receipts verification using C++) 들어가며 필자가 만드는 모바일 게임 서버는 C++기반으로 작성되어 있다. php나 python을 이용한 서버 사이드 구글 인앱 결제 검증 예제는 인터넷에서 쉽게 찾을 수 있었지만 C/C++의 경우는 관련 예제를 찾을 수 없어 고생하다 openssl 기반 검증 코드를 직접 만들어야만했고 실제 사용하면서 문제가 없었기에 여기에 공유하도록 한다. 코드를 보시는 분들의 이해를 돕기 위해 실제 사용된 퍼블릭 키와 영수증을 예제에 첨부 했으므로 테스트 해보기 편할 것이라 생각한다. 본 포스트에 사용된 예제 프로젝트의 전체 코드는 [여기]에서 확인 할 수 있다. 본 포스트에서는.. 클라이언트 사이드 구글 인앱 결제를 어떻게 하는지 설명하지 않는다. 워낙 클라이언트 종류가 많고 그걸 일일이 다 나열하기에는 시간과 공간..
[C++11] Variadic template(Parameter pack) Variadic template C++에서는 Parameter pack이라고 불리며, 수가 정해지지 않은 N개의 인자를 사용 할 수 있는 기능으로써 D언어와 C++ 11에서 지원하고 있다 en.cppreference.com/w/cpp/language/parameter_pack Parameter pack(since C++11) - cppreference.com A template parameter pack is a template parameter that accepts zero or more template arguments (non-types, types, or templates). A function parameter pack is a function parameter that accepts zero..
[C++] 구조체 바이트 패딩 규칙(structure byte padding or align rule in C++) 들어 가며.. 지금 까지 나는 byte padding이 cpu 레지스터 사이즈를 따라 일괄적으로 적용 되는 줄 알고 있었다. 하지만 오늘 exe와 dll 사이에서 일어난 문제를 해결하며 찾아본 자료에서 byte padding은 아래의 네 가지 규칙에 따라 구조체에 따라 다르게 적용 된다는 사실을 알았다. 예를 들어 설명 하자면 지금까지 페이지 사이즈가 4byte인 어플리케이션에서는 byte padding 사이즈를 따로 지정해 주지 않는 한 1 byte 짜리 멤버 변수를 가진 구조체나 4 byte 멤버 변수를 가진 구조체의 sizeof 결과가 모두 4 byte로 같을 것이라고 생각 했으나 실제로는 각각 1 byte, 4 byte로 다르게 align 되고 있었다. 바이트 패딩 규칙 msdn의 align (C..
error: too few template-parameter-lists " error: too few template-parameter-lists"는 신규 버젼 gnu cpp 컴파일러에서 발생하는 에러다. 이 문제는 템플릿 클래스의 static 멤버 변수를 초기화 할 때 발생하며, 해결을 template을 static 멤버 변수 초기화 코드 앞에 붙여 주어야 한다. 예를 들어 : template class A { static int a; static const char * const name; }; 와 같은 코드가 있다고 해보자. 예전에는 아래와 같이 써도 무방했다 : int A::a = 0; const char * const A::name = NULL; 하지만 위와 같은 코드는 CeePlusPlus 표준에 의해 이제는 더 이상 유효한 코드가 아니며 "" error: too..

반응형