[C++] | extern "C"와 __declspec(dllexport)는 대체 뭔데
·
개발/C++
개요C++로 DLL을 익스포트하여 유니티에서 사용하려고 할때 C++안의 함수에 extern "C" __declspec(dllexport)를 붙입니다.참 기괴하게 생겼는데 어찌보면 C++답게 생겼습니다.오늘은 얘네들이 뭐하는 놈인지를 살펴보죠.    extern "C"딴거 다 제쳐두고 뜻만 알아보자면 extern "C"는 코드를 C언어 스타일로 내보내라는 뜻입니다....너무 막연하죠? 당연하게도 뭔소린지 모르겠습니다. C++도 해보다보면 사실 C언어 확장판이라 대체 C언어 스타일이 뭘까 고민하게됩니다.조금 더 깊이 들어가자면 extern "C"는 name mangling을 하지 말라는 뜻입니다. name mangling이 extern "C" 키워드를 이해하기 위해선 먼저 C++의 name mangling을..
게임 프로그래밍 | C++ | 헤더
·
개발/C++
개요마지막으로 썼던 글이 4월 29일입니다.거의 한달만에 펜대를 잡는군요.아아, 이 서늘하고도 묵직한 감각... 24일 만이구만.  놀랍게도 저는 저 글에서 이렇게 말한 바 있습니다.분명히 설명했던 내용인 것 같은데 딴곳에다가 적었던 것 같군요. 나중에 헤더 관련으로 간단하게 글 한번 더 쓰겠습니다.진짜로! 1주 안에 헤더 글로 뵙죠.  안타깝게도 제가 생각하는 저보다 저는 그리 부지런한 인간이 아니였습니다. 물론 변명할 거리는 넘쳐납니다.STA+C 준비도 해야했고... 수업도 너무 많았고... 수행평가도 이거저거 겹쳤고... 하지만 변명은 하남자만 하는법. 물론 저는 변명을 하겠습니다.너무 STA+C이 바빴어요. 저번 주 금요일까지 정말 감기에 걸려 죽어가면서(진짜임) 까지 STA+C을 했습니다. 그리..
게임 프로그래밍 | C++ | 빌드
·
개발/C++
개요제가 저번 게임 프로그래밍 수업 정리글이였던 게임 프로그래밍 | C++ | 메모리 구조 에서 말했듯이 다음 글은 빌드가 될 예정이였습니다...만! 이런... 글을 그 사이에 5개나 적어버렸더군요. 사실 빌드 정리글을 적어야 한다는 사실도 블로그를 싹다 갈아 엎으면서 다듬는 과정에서 글을 다시 읽었기에 떠오른 것이였습니다.일단 적어보겠습니다. 정확히 기억은 잘 안나지만 수업 자료 대충 돌려보면서 되짚으면 기억나지 않을까요?   무엇을?일단 빌드가 무엇인지부터 알아야겠죠?저희 프로그래머가 보통 빌드라고 부르는 것은 소스 코드를 실행 가능한 실행 파일로 만드는 것을 말합니다.허구한날 빌드본, 빌드본 거리는 이유가 여기에 있죠. 헤더에서 볼 수 있듯 여기선 C++ 소스 파일의 빌드 과정을 알아볼겁니다.   ..
자료구조 | C++ | 연산자 오버로딩 (Overload)
·
개발/C++
개요오랜만에 수업 정리 글입니다.오랜만인만큼 상당히 예전 진도입니다. 이거 이용해서 수행평가까지 봤어요.수행평가 만점임(중요) 아무튼 오늘 정리할 내용은 연산자 오버로딩 입니다. 연산자 중복이란 자랑스러운 한국어 냅두고 영어를 쓰는 이유는 있어보여서 입니다.  그게 뭔데 연산자 오버로딩은 함수처럼 연산자를 오버로딩 하는 것을 뜻합니다.보통 연산자를 통해 연산할 수 없는 것 (클래스 등) 끼리 더하거나 코드의 편의성을 높이기 위해 사용합니다.  이러한 클래스가 있다고 해봅시다.class MyClass{ int a; int b; public: MyClass(int x, int y) : a{x}, b{y} {};}  근데 저는 이 클래스 두개를 더했을때 각자의 클래스의 a와 b변수를 더한 새 클래스..
C++ | 동적 배열
·
개발/C++
개요전글에서 바로 이어서 적는 글입니다.이번 글의 헤더는 C++이군요.서두가 너무 길면 조금 그러니까 바로 시작합시다.   동적 배열 C++에서 동적 배열은 new 키워드를 통해 만들 수 있습니다.int length = 10;int* arr = new int[length]; 근데 이렇게 됐을때 저 크기를 담당하는 length라는 놈을 바꿔버릴 수 있습니다.그렇게 되면 진짜로 크기가 런타임 도중에도 유동적으로 바뀌는 진짜 동적 배열이 되는줄 알았죠.int length = 10;int* arr = new int[length];length = 20;arr[19] = 10;cout  작동은 하지만...봤을때 이게 말이 되는 코드입니까?일단 new를 통해 데이터를 할당할때는 크기가 10이였죠?=그래서 new도 마..
게임 프로그래밍 | C++ | 메모리 구조
·
개발/C++
개요 제가 저번 글에서 예고했듯이 이번 글은 메모리와 빌드입니다....그러고보니 저번 글을 쓴게 언제였죠? 우와... 자그마치 6일전입니다.메모리와 빌드는 거의 2주에서 3주 전 진도인데 이제야 정리하기 시작하는게 참 양심없긴 하지만...월요일에 갑자기 몸살이 찾아온 뒤로 현재 위치가 집인 상황에서 후딱 해치우겠습니다.아, 그리고 저번 글의 제목도 원래는 '열거형과 힙' 이였습니다.근데 어짜피 메모리 정리할때 힙도 정리할텐데 굳이 애매한 분량으로 정리해야 하나 해서 분리시켰죠.라고 적었는데 메모리 분량이 생각보다 길어서 분리시키겠습니다.뭔가 했던말 같죠? 익숙하다면 당신의 눈이 정확한겁니다! 빌드는 다음 글로 작성하겠습니다. 꼭! 일주일 안에 뵙죠.    메모리선생님 가라사대, C++에서 메모리는 매우 ..
게임 프로그래밍 | C++ | 열거형
·
개발/C++
개요제가 저번 글에서 다음 글은 메모리와 빌드가 될 것이라고 얘기한적이 있습니다.하지만 오늘의 주제는 열거형(Enum)입니다. 왜냐하면 생각해보니 어제 정리했던 콘솔 / 입력 이 제가 지금 정리하는 열거형 보다 다음 진도이기 때문입니다.겹치는 부분은 별로 없기 때문에 빠르게 다시 정리하러 왔습니다. 열거형 단 하나만 다루기 떄문에 분량이 굉장히 짧습니다.원래 같이 배운 힙 메모리에 관한 내용이 있는데 이건 다음 정리글이 될 예정인 메모리와 빌드에서 같이 정리하겠습니다.     열거형열거형, Enum은 int형 상수에 이름을 붙인 것과 같습니다.  #define과 비슷한 느낌이지만 매크로가 아니고 int와의 형변환이 자유롭지 않습니다. enum은 다음과 같이 선언하며enum FRUIT{ APPLE, //..
게임 프로그래밍 | C++ | 콘솔 / 입력
·
개발/C++
개요앞으로 주구장창 하게 될 얘기일지도 모르겠지만 게임 프로그래밍 시간은 특징이 하나 있습니다.'이번엔 이것을 하겠습니다.' 라고 하고선 딱 그것만 하지 않아요. 수업 중간중간에 자잘한 것들을 자주 배우고 그것을 이 글의 제목에 대주제와 함께 녹여낼 능지가 저에겐 없습니다.오늘은 메모리와 빌드에 대해 배웠다고 적고있지만 사실 메모리와 빌드만 배운게 아닙니다.콘솔창에 관해서도 배웠는데 아직 미미한 수준이기에 메인으로 배운 메모리와 빌드를 대주제로 삼은 것이죠. 라고... 적었었는데 콘솔 분량이 생각보다 너무 길어지더군요.콘솔과 메모리와 빌드는 분리하겠습니다.    콘솔콘솔창에서 입력을 받으려면 cin나 scanf() 같은 것들을 사용합니다.하지만 저희가 앞으로 만들게임은 텍스트 게임에 국한되지 않고 봄버맨..