반응형

언어 33

동적 라이브러리와 정적 라이브러리

개요 동적 라이브러리와 정적 라이브러리에 대해 비교한다. 라이브러리 라이브러리란, 프로그램을 만들 때 사용되는 클래스나 서브루틴들의 모임이다. 1. 정적 라이브러리(Static Library) 컴파일 타임에 소스 코드와 함께 라이브러리가 링크되는 방식이다. 일반적으로 .lib 확장자를 가지며 이 파일을 실행 바이너리에 포함한다. 라이브러리의 코드와 데이터가 실행 파일 내에 복제되기 때문에, 실행 파일의 크기가 증가한다. 실행 파일이 독립적으로 실행될 수 있으며, 실행 중에 외부 라이브러리에 대한 의존성이 없다. 코드의 재사용성이 낮아지고, 여러 프로그램에서 동일한 라이브러리를 사용하는 경우 중복된 코드가 발생할 수 있다. 컴파일 타임에 소스 코드와 함께 라이브러리가 링크되는 방식이다. 정적 라이브러리를 ..

언어/C++ 2023.05.17

[Unreal] 콘텐츠 브라우저에서 C++ 클래스가 보이지 않을 때

개요 콘텐츠 브라우저에서 C++ 클래스가 보이지 않을 때 해결책을 서술한다. 문제 상황 언리얼 솔루션에는 헤더 파일과 cpp파일이 올바른 경로에 있는데 콘텐츠 브라우저 창에서는 제대로 보이지 않는 문제점이 있었다. 어이없는 실수...였는데 새 C++ 클래스를 생성하거나, 기존 클래스 내용을 변경한 경우 언리얼 엔진을 다시 빌드하지 않으면 콘텐츠 브라우저에 나타나지 않을 수 있다는 것이었다. 컴파일을 다시 해주면 정상적으로 파일이 나타나는 것을 확인할 수 있었다. 유입 키워드 언리얼 C++ 클래스 안보임, 언리얼 C++ 클래스 사라짐

언어/C++ 2023.03.28

[C++] 미정의 동작

개요 C++에서의 미정의 동작에 대해 설명한다. 미정의 동작 C++에서 미정의 동작은 C++ 언어 표준에 정의 되지 않은 동작을 말한다. 이러한 동작은 운영 체제, 컴파일러, 실행 환경에 따라 결과가 달라질 수 있는 예측할 수 없는 동작을 일으킨다. 예측할 수 없는 동작이 발생하면 프로그램이 비정상적으로 종료되거나, 다른 변수나 객체의 값이 변경되거나, 잘못된 값이 반환될 수 있다. 미정의 동작 발생 상황 미정의 동작이 발생할 수 있는 상황은 다음과 같다. 1. Double-free : 이미 해제된 메모리를 다시 해제하는 경우 발생한다. 동일한 메모리 블록을 두 번 해제하려는 시도를 한다면 시스템에서 예측할 수 없는 결과가 발생할 수 있다. 2. Dangling pointer : 이미 해제된 메모리를 가..

언어/C++ 2023.03.21

[C++] iterator로 set, vector 원소 삭제하기 (cannot increment value-intialized map/set)

개요 iterator로 set, vector 원소 삭제(earse)하는 방법에 대해 서술한다. for (set::iterator iter = s.begin(); iter != s.end(); iter++) { if (*iter % 2 == 0) { s.erase(iter); iter--; } } 삭제가 잘 될줄 알았지만... 삭제가 잘 되지 않는다. 사유를 보니 erase(iter)를 하게 되면 iter가 무효화되기 때문에 연산이 먹지 않는다고 한다. vector의 iterator여서 iter++을 하면 다음 요소로 넘어가지 않을까? 굳이 무효화해야하나?라고 생각했지만 iterator는 vector 말고도 list 등에서도 작동하므로 iter를 무효화해준다고 한다. https://stackoverflow..

언어/C++ 2022.11.19

no viable conversion from 'value_type' (aka 'char') to 'string' (aka 'basic_string<char, char_traits<char>, allocator<char> >')

개요 string 할당하다가 생긴 오류 no viable conversion from 'value_type' (aka 'char') to 'string' (aka 'basic_string') "char"에서 "std::basic_string"(으)로 변환하기 위한 적절한 생성자가 없습니다. 설명 1 2 3 4 5 6 7 8 9 10 11 12 #include #include using namespace std; int main() { string s = "Hello, World"; string myStr = s[0]; return 0; } cs mystr에 H가 들어가야 할 거 같지만 string 클래스에 myStr = s[0]과 같은 생성자가 없기에 위와 같은 에러가 발생한다. 따라서 다음과 같이 생성..

언어/C++ 2022.11.05

[C#] 프로퍼티

개요 객체 지향 프로그래밍에서, 은닉성 때문에 Get함수와 Set함수를 사용한다. C++에는 없고, C#에는 있는 프로퍼티 기능을 사용하면 이를 간단하게 줄일 수 있다. 설명 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 using System; namespace CSharp { class Program { class Monster { private int hp = 100; public int GetHp() { return hp; } public void SetHp(int value) { hp = value; } } static void Main(string[] args) { Monster monster = new Monster(); monster.SetHp(..

언어/C# 2022.09.24

[C++] string 덧셈

개요 알고리즘 문제를 풀다 보면, 숫자 범위가 long long 타입조차 초과하는 경우가 발생한다. 이럴 때는 string 타입으로 바꿔 계산할 필요가 있다. 풀이 원활한 계산을 위해 길이가 더 작은 string에 다른 string의 길이와 같게 되도록 앞에 0을 붙여준다. 예를 들어 17547 + 49의 경우 17547 + 00049로 만들어 준다. 그 후, 뒤에서 부터 덧셈을 진행하여 sum, carry를 계산하고 마지막에도 carry가 1이 발생하면 1을 앞에 붙여준다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ..

언어/C++ 2022.09.17

[C++] Inline 함수

개요 일반적으로 함수가 호출되면, 함수에 전달할 매개변수와 함수 호출이 끝난 뒤 돌아갈 반환 주소값을 스택에 저장하게 된다. 그 후에 프로그램 제어가 함수의 위치로 넘어오고, 함수 내에 선언된 지역 변수도 스택에 저장한다. C++에서 함수를 호출하면 위와 같은 복잡한 과정을 거치게 되므로, 함수를 호출하는데에 약간의 시간이 소요된다. 함수 실행 시간이 길다면 함수 호출 시간이 차지하는 부분이 미미하지만, 함수 실행 시간이 짧다면 함수 호출 시간이 함수 실행 시간보다 더 길어지는 배보다 배꼽이 큰 상황이 발생할 수 있다. C++에서는 이러한 경우에 사용할 수 있는 인라인 함수(Inline function)을 제공한다. 인라인 함수는 호출되었을 때 일반적인 함수 호출의 과정을 거치지 않고, 인라인 함수의 모..

언어/C++ 2022.07.19

[C++] string 한글 출력

개요 C++에서 string으로 한글을 출력할 때 깨지는 오류가 있었다. 관련해서 디버깅해보던 중에 한글이 2바이트... 인걸 깨닫게 되어 정리해본다. 예제 다음과 같은 코드의 출력 결과는 어떻게 될까? 1의 결과로는 "심"이 출력되고 2의 결과로는 3(심건우가 3글자이므로)이라고 생각하기 쉽다. #include #include using namespace std; int main() { string s = "심건우"; cout

언어/C++ 2022.07.15
반응형