본문 바로가기

PL/C & C++

(75)
[C++] extern, static static은 해당 파일 안에서만 사용 extern은 파일 외부에서도 사용 가능 C++ 04.03 - 전역 변수와 링크 (Global variable and linkage) 04.03 - 전역 변수와 링크 (Global variable and linkage) 함수 내부에서 정의된 변수를 지역 변수(local variable)라고 한다. 지역 변수는 블록 스코프(정의된 블록 내에서만 접근 가능)가 있고 자동 주기(정의 boycoding.tistory.com static과 extern 키워드를 이용한 내부/외부 링크 (Internal and external linkage via the static and extern keywords) 변수는 스코프(scope)와 주기(duration) 외에도 링크(linka..
[C++] 암시적 형 변환 (Implicit type conversion) C++ 05.01 - 암시적 형 변환 (Implicit type conversion) 05.01 - 암시적 형 변환 (Implicit type conversion) 이전에 변수의 값이 일련의 비트로 저장되는 것과 변수의 자료형은 컴파일러에 비트를 의미 있는 값으로 해석하는 방법을 알려준다는 것을 배웠다. 다 boycoding.tistory.com 기본적인 형 변환에는 두 가지 유형이 있다. 암시적 형 변환(implict type conversion): 즉 컴파일러가 자동으로 하나의 기본 자료형을 다른 자료형으로 변환한다. 자동 형 변환(automatic type conversion)이라고 불린다. 명시적 형 변환(explict type conversion): 형 변환을 하기 위해 형 변환 연산자(type..
[C++] thread, async 차이점 C++ thread와 async의 차이점 C++에서 병렬처리를 하기위해 여러가지 클래스를 제공합니다. C++에선 std::thread, std::task, std::future, std::async를 제공합니다. 그 중 많이 쓰이는 std::thread와 std::async에 대해 설명해볼까 합니다. 1. C++ hwan-shell.tistory.com 이 둘의 차이점은 내부에 있습니다. std::thread 클래스는 말 그대로 Thread만 생성해주는 역할을 합니다. 물론 Thread가 종료를 기다리는 .join() 함수같은 기본적인 함수들을 제공하지만 이런것들을 제외하곤 날 것이라고 봐도 무방합니다. 말 그대로 Thread만 생성하니깐요. 반면std::async는 std::task클래스 기반으로 만들..
[C++] 전처리문 [C++] 전처리문 안녕하세요. 명월입니다. 이 글은 C++에서 전처리문에 대한 글입니다. 전처리문이란 C++이 컴파일해서 실행되기 전에 처리되는 소스 메크로라고 생각하면 됩니다. 간단한 예를 들면 debug 상태에서 nowonbun.tistory.com 전처리문의 종류는 총 12가지 정도 있습니다. 전처리기설명 조건부 포함 전처리문(Conditional inclusions) #if 전처리 분기문 if에 해당됩니다. define에 정의 값을 비교합니다. #elif 전처리 분기문 else if에 해당됩니다. define에 정의 값을 비교한다. elif 전처리문 단독으로 사용할 수 없습니다. #else 전처리 분기문 else에 해당됩니다. else 전처리문 단독으로 사용할 수 없습니다. #endif 전처리 ..
[C++] lambda 표현식 1. C++ 람다 표현식 2. C++ lambda 사용법과 구조 2-1) 람다 기본 모양과 사용법 2-2) 람다 캡처 사용법 3. C++ 람다의 필요성과 사용 예제 [C++] 람다 표현식, lambda에 대해서 안녕하세요. BlockDMask입니다. 오늘은 C++11, 14에서 추가된 lambda 표현식에 대해 알아보겠습니다. 1. 람다 표현식 2. 람다 표현식 사용 방법과 구조 3. 람다의 필요성, 사용 예제 1. C++ 람다 표현식 lambda blockdmask.tistory.com 1. C++ 람다 표현식 lambda는 람다 표현식, 람다 함수, 익명 함수 등의 이름으로 불립니다. 일단 람다 함수가 어떻게 생겨먹었는지 먼저 보겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1..
[C&C++] undefined reference to~ /cpp 파일에서 c 파일 불러오기 [C, C++] error: undefined reference to 빌드 시 가장 흔하게 발생하는 에러 중 하나로 다음 두가지 이유 중 하나로 발생한다. 1. 가장 흔히 발생하... blog.naver.com cpp 파일에서 c 파일에 구현되어 있는 함수를 call 할때 발생한다. c 파일에 구현되어 있는 함수의 정의가 적혀 있는 header 파일을 #ifndef _FILENAME_H_ #define _FILENAME_H_ #ifdef __cplusplus extern "C" { #endif .... #ifdef __cplusplus } #endif #endif /* _FILENAME_H_ */ extern "C"{ } 로 감싸야 함
[C&C++] 조건부 컴파일 사용하기 C 언어 코딩 도장: 76.1 조건부 컴파일 사용하기 조건부 컴파일은 #ifdef와 #endif 지시자를 사용하여 정의합니다. #ifdef에 매크로를 지정하면 해당 매크로가 정의되어 있을 때만 코드를 컴파일합니다. #ifdef 매크로 코드 #endif 다음 내용을 소스 코 dojang.io #ifdef, #endif가 전처리기 과정을 거치면 코드는 다음과 같이 바뀝니다.▼ 그림 76‑1 #ifdef 조건부 컴파일
[C] 실행 파일 옵션 사용하기 C 언어의 main 함수는 다음과 같이 실행 파일 옵션을 매개변수로 받을 수 있습니다. int main(int argc, char *argv[]); 먼저 option이라는 프로젝트를 만들고 main.c 파일을 추가한 뒤 다음 내용을 입력하세요. Win + R을 누른 뒤 cmd.exe를 입력하여 명령 프롬프트를 실행합니다. 그리고 프로젝트 디렉터리의 Debug 디렉터리로 이동한 뒤 다음과 같이 실행합니다(c:\project\option\Debug). option.exe에 Hello, C, Language이라는 옵션을 지정했습니다. 이 상태로 실행을 해보면 실행 파일 이름과 옵션이 그대로 출력됩니다. main 함수에서 첫 번째 매개변수 argc는 옵션의 개수이며 argv는 옵션 문자열의 배열입니다. 옵션은 ..
[C&C++] 구조체 비트 필드 사용하기 이제 구조체를 7비트, 3비트, 1비트로 나눠서 비트 필드를 정의해보겠습니다.▼ 그림 56‑1 구조체 비트 필드 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요. C 언어 코딩 도장: 56.1 구조체 비트 필드를 만들고 사용하기 56 구조체 비트 필드 사용하기 지금까지 구조체의 멤버는 각 자료형 크기만큼 공간을 차지했습니다. 하지만 구조체 비트 필드를 사용하면 구조체 멤버를 비트 단위로 저장할 수 있습니다. 특히 C dojang.io
[C++] static_cast, reinterpret_cast 형 변환 연산자: static_cast와 reinterpret_cast의 차이 이번에는 간단하게 static_cast와 reinterpret_cast의 차이점에 대하여 알아봅니다. 실제로 이 두가지는 비... blog.naver.com 컴퓨터는 비트 단위로 정보를 저장합니다.1 당연히 정수 5와 실수 5.0은 엄청난 차이가 있습니다. 단순히 변환을 명령했더니 이러한 복잡한 처리를 내부에서 전부 해줍니다. 이것이 static_cast입니다. static_cast는 형 변환을 요청받으면 내부에서 지정된 형 변환 함수를 호출합니다. int와 float사이에도 그러한 함수가 있는 것입니다. 다음 예제를 봅시다. 당연히 형 변환은 일어나지 않습니다. 그도 그럴것이 형 변환 함수도 없으며 어떻게 변환해야되는지 컴파..
[C++] const_cast const_cast(expression) const_cast(대상) const_cast는 포인터(pointer) 또는 참조형(reference)의 상수성(const)를 잠깐 제거해주는데 사용합니다. const_cast는 volatile 키워드를 잠깐 제거해 주는 데에도 사용이 가능합니다. 다른 캐스트 연산자가 하는 형 변환은 불가능 하며 오직 상수성(const)를 제거하는 것만 사용가능 합니다. 또한 다른 캐스트 연산자는 const_cast가 하는 상수성(const) 제거를 하지 못합니다. 함수 포인터에는 사용 불가능합니다. (해봤음;;) > 예제(1) - 포인터(pointer) 상수성(const) 제거 #include using namespace std; int main(void){ char str[]..
[C++] type cast 4가지 종류 static_cast const_cast reinterpret_cast dynamic_cast [C++] const_cast (타입 캐스트 연산자) 안녕하세요. BlockDMask 입니다. 오늘은 C++ 의 네가지 타입 캐스트 연산자 중에 (static_cast, const_cast, reinterpret_cast, dynamic_cast) const_cast 에 대해 알아보겠습니다. > const_cast 에 관한 기본 특.. blockdmask.tistory.com
[C++] 함수를 객체로 (C++ std::function, std::mem_fn, std::bind) 씹어먹는 C ++ - modoocode.com Callable 의 정의 std::function std::mem_fn std::bind 1. Callable Callable 이란, 이름 그대로 나타내듯이 호출(Call) 할 수 있는 모든 것을 의미합니다. 대표적인 예시로 함수를 들 수 있겠지요. 하지만 C++ 에서는 () 를 붙여서 호출할 수 있는 모든 것을 Callable 이라고 정의합니다. 예를 들어서 f 역시 일반적인 함수의 꼴을 하고 있지는 않지만, () 를 통해서 호출할 수 있기에 Callable 이라 할 수 있습니다. 2. std::function C++ 에서는 이러한 Callable 들을 객체의 형태로 보관할 수 있는 std::function 이라는 클래스를 제공합니다. C 에서의 함수 포인..
[C++] 무한대(infinity) [C++] infinite infinite 이미지좀 가져올라고 검색했더니 가수 인피니트가 뜬다....짜증난다..우선 C++에는 무한대 타입이 존재한다. 의 std::numeric::limits::infinity() 이다.하지만 이 메소드는 실수타입에서만 제 velog.io
[C++] 우선순위 큐(Priority Queue), pair<int, int> 내림차순 오름 차순 [C++] STL Priority_Queue Library 기본 명령어 정리 안녕하세요, 여행벌입니다. 오늘은 우선순위큐(Priority Queue)에 대해서 알아보도록 하겠습니다. 1. Priority_Queue(우선순위큐) 란? Priority_Queue는 Queue의 한 종류로 이름 그대로 우선순위에 따라 정렬된 travelbeeee.tistory.com [C++, STL] 우선순위 큐(priority queue) 비교연산자 구현 서론 2020/04/27 - [자료구조와 알고리즘] - [C++, STL] 알고리즘 문제풀이를 위한 우선순위 큐(priority queue) 우선순위 큐는 비교연산자를 통해 자료의 우선순위를 정할 수 있다. 그리고 STL에는 자료를 hydroponicg..
[C++] 2차원 배열 초기화 2차원배열의 모든 원소의 값을 1로 하고 싶은 경우 1)각 원소 직접 지정 int arr[5][5]={{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1}}; 이렇게 int arr[5][5]={{1}}; 하나만 지정하면 나머지는 모두 0이 들어갑니다. 다시 해보니 안되네요... int area[M][N]={{1,0,0,0,0},}; 로 한줄은 해줘야 나머지가 모두 0이 들어갔습니다. 2)std::fill_n 이용 int arr[5][5]; fill_n(arr[0],25,1) fill_n(arr,25,1)은 에러가 납니다. arr, arr[0]의 메모리주소를 확인해보면 값은 같은데... 3)std:fill이용 int arr[5][5]; fill(arr[..
[C++] string to int stoi, stof, stol, stod 함수에 대해서 (string to int) ▼ C++11 부터 아래 함수들을 사용할 수 있습니다. stoi = string to int stof = string to float stol = string to long int stod = string to double 아래처럼 다른것들도 있지만 많이 사용하진 않아서요. 위에 4개(stoi, stof, stol, stod)에 대해서만 다루겠습니다. stoul = string to unsigned int stoll = string to long long stoull = string to unsigned long long stold = string to long double 2. C++ stoi, stof, stol, s..
[C++] vector 1) vector container 란? vector 컨테이너는 자동으로 메모리가 할당되는 배열. 이라고 생각하면 될거같습니다. 저는 C를 하다가 C++로 넘어와서 이렇게 vector 컨테이너를 처음 접하고 정말 소름이 돋았었습니다. 자동으로 메모리를 할당해주고 알아서 끝에 들어가주고 알아서 삭제도 해주고,,,, 정말 효자 컨테이너입니다. 모든 STL 이 그렇듯. template를 사용하기 때문에 데이터 타입은 마음데로 넣을 수 있습니다. 간단하게 그림으로 구조를 먼저 보고 넘어가겠습니다. (약간 자료구조 스택과 비슷한 느낌입니다.) 이러한 구조를 가지고있으며, 맨 뒤쪽에서 삽입과 삭제가 가능합니다. 중간에 값을 삽입 하거나 삭제할 수도 있습니다. 하지만 배열기반이으로 삽입 삭제가 빈번하게 일어난다면 비..
[C&C++] 자료형 C/C++ 에 존재하는 모든 자료형 개념 총 정리 - Easy is Perfect 알고리즘 문제 풀이 시에, 모르는 게 많이 생기게 됩니다. 특히 자료형에 대한 게 많이 헷갈리는 경우가 존재합니다. 어떤 문제는 long long 자료형을 써야할 때가 있고 (int 형의 범위를 초과해서) melonicedlatte.com [C++ 정리] 자료형의 크기 및 범위 | Opendocs __int64 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 myblog.opendocs.co.kr
[C++] string [C++] string 클래스, 문자열에 대해서 (총정리) 안녕하세요 BlockDMask 입니다. 오늘은 C++의 std::string 클래스(문자열)에 대해서 세세 하게 알아볼것 입니다. 예전 글을 보다가 제가 작성한 이 문서를 보게 되었는데요, 너무 내용이 빈약하다고 blockdmask.tistory.com
[C++] tuple tuple은 기존의 std::pair를 확장한 자료형입니다. std::pair가 2개의 값을 한 번에 저장할 수 있지만 tuple은 제한이 없습니다. 기존의 C++ TR1에서는 10개까지 저장이 되었습니다. tuple은 2개 이상의 값을 한 번에 반환하거나 전달할 때 사용하면 유용합니다. 물론 구조체를 통해서 가능한 방법이긴 하지만 구조체는 정의를 해서 사용해야 합니다. tuple을 이용하면 간단하게 다양한 값들을 한 번에 전달이 가능하게 됩니다. 먼저, std::tuple 안의 안에 필요한 변수 타입들을 작성합니다. typedef로 해당 타입을 OddOrEven 타입이라고 명명했습니다. tuple 변수에 값을 넣을 때는 std::make_tuple()을 사용하면 됩니다. 해당하는 위치에 해당하는 값을 ..
[C++] string::find() (문자열에서 특정 문자 찾기) string::find() string 클래스의 멤버함수로서, str.find("찾는 문자") 로 사용 반환값은 찾는 문자의 첫번째 인덱스값 찾는 문자가 없을 경우는 string::npos를 리턴한다. (npos는 no position으로 쓰레기값 나옴) [C++] string::find() (문자열에서 특정 문자 찾기) string::find() string 클래스의 멤버함수로서, str.find("찾는 문자") 로 사용 반환값은 찾는 문자의 첫번째 인덱스값 찾는 문자가 없을 경우는 string::npos를 리턴한다. (npos는 no position으로 쓰레기값 나옴. lollolzkk.tistory.com
[C] 배열 초기화( memset, calloc ) 1. memset 2. calloc 3. 기본 C 언어 코딩 도장: 36.2 배열을 0으로 초기화하기 이번에는 배열의 모든 요소를 간단하게 0으로 초기화해보겠습니다. 자료형 배열이름[크기] = { 0, }; array_init.c #include int main() { int numArr[10] = { 0, }; // 배열의 요소를 모두 0으로 초기화 printf("%d\n", nu dojang.io [C] malloc, calloc, realloc을 이용한 메모리 동적 할당 동적할당을 사용하는 이유는 무엇일까? c언어의 메모리 구조에 대해서 알고 있다면 동적할당을 사용하는 이유를 쉽게 알 것이다. 2014/06/26 - [Programming/C언어] - [C] 스택(Stack), 힙(Heap), 데이..
[C & C++] 2차원 배열과 포인터 10. 2차원 배열 출처 http://coolprogramming.springnote.com 저작자 NetGong 배열은 같은 자료형의 연속메모리라고 했습니다. 기억하시죠?! 그리고 앞에서 배운 배열은 모두 1차원 배열이라고 합니다. []연산자 하나 blog.daum.net C언어 2차원배열(이중포인터) 동적메모리할당 * 동적메모리 할당에 대해서는 이미 몇번의 포스팅에서 이야기 한적이 있습니다. 이번 포스팅에서는 2차원... blog.naver.com
[C++] template, header, class 그런데 템플릿으로 클래스를 만들 경우는 C++에서 주의할 점이 있는데 h 파일과 cpp 파일로 나누어 선언, 정의할 경우 이 클래스를 사용하는 파일에서는 h 파일뿐 아니라 cpp 파일도 #include해줘야 합니다. 그게 아니라면 h 파일에 선언과 정의를 몰아서 다 하거나... 이게 C++에서 발생하는 결함 중 하나입니다. [C++ 강좌] 065 - 템플릿의 작성 (5) - 클래스 템플릿, 클래스 템플릿의 typedef 오랜만이예요.(아마도)저번 글까지가 함수 템플릿에 관한 내용이었는데, 이번엔 클래스 템플릿에 대한 내용... blog.naver.com
[C++] template
[C++] vector, reserve(), resize() reserve()는 공간이 예약된다. 배열을 만들때 int array[크기] 하는것과 같다. 만약 앞으로 데이터가 자주 추가된다면 벡터가 가득 찼을때 스스로 공간을 늘리지 않기 때문에 성능을 더 향상할 수 있다. 만약 전부 찬상태에서 또 집어넣으면 늘어난다. resize()는 공간 예약 + 안의 모든 공간을 특정한 값으로 채운다. 변수를 만들때 쓰레기값이 없게 하기위해 NULL로 초기화 하는것과 비슷하다. ex) int array[10] = {0 ,} 현재보다 큰 공간을 예약하면 그만큼 더 집어넣는다. ex) 5개가 들어있는 상태에서 resize(10)하면 5개가 더들어감 -> 5 + 5 = 10 용량이 딱 정해져 있다. 더들어 오게 된다면 버려지게 된다. vector resize()와 reserve()..
[C] 매개변수 배열의 크기 실제로 포인터 변수는 항상 4 / 8 바이트의 정해진 크기를 갖습니다. 여기서 4 / 8 바이트는 long형과 마찬가지로 32비트 운영체제에서 4바이트, 64비트 운영체제에서 8바이트를 의미합니다. 구름EDU - 모두를 위한 맞춤형 IT교육 구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/ edu.goorm.io 배열을 함수의 매개 변수로 사용할 때 주의할 점 : C 언어 관련 전체 목차 http://blog.naver.com/tipsware/2210108319691. 일반 변수를 함수의 매개 변수... blog.naver.com 포인터가 어렵나요? (네) ..
[C & C++] 함수에서 배열 매개변수 사용하기 C 언어 코딩 도장: 64.1 배열 매개변수 사용하기 64 함수에서 배열 매개변수 사용하기 함수에서 배열을 매개변수로 사용하면 연속된 값을 전달할 수 있고, 전달한 배열의 요소를 함수 안에서 변경할 수 있습니다. 이번에는 1차원 배열과 2차원 dojang.io
[C++] virtual 가상 함수는 기본 클래스(상속되지 않은 클래스) 내에서 선언되어 파생 클래스에 의해 재정의되는 맴버 함수입니다. 포인터(Pointer) 또는 기본 클래스에 대한 참조(Reference)를 사용하여 파생 클래스의 객체를 참조하면 해당 객체에 대해 가상 함수를 호출하고 파생 클래스의 함수를 실행할 수 있습니다. 이는 주로 실행시간(Runtime)에 함수의 다형성(Polymorphism)을 구현하는데 사용됩니다. 가상 함수는 기본 클래스내에 virtual 키워드로 함수를 선언합니다. parent 클래스를 가리키는 포인터 p를 선언하고, child 클래스의 객체 c를 선언했습니다. 이 포인터 p는 c객체를 가리킵니다. 몸체는 parent 클래스지만 실제 객체는 child 클래스입니다. 이 포인터 p를 이용하여 ..