본문 바로가기
반응형

프로그래밍 언어135

[C] [전처리기] 매크로와 선행처리기 매크로와 선행처리기실행파일이 컴파일과 링크의 과정을 거치는데 컴파일 이전에 선행처리 과정을 거친다.▶ 선행처리 → 컴파일 → 오브젝트 파일 → 링크 → 실행 파일※ 컴파일 과정에 포함해서 표현하기도 한다.    한편으로는 컴파일러에 따라서 전처리 과정은 전처리기(preprocessor)라는    별도의 프로그램으로 수행하기도 한다.※ 소스코드가 선행 처리기를 거쳐도 별도의 파일이 생성되는 것은 아니다.    소스파일을 유지 하며, 선행처리 명령문대로 소스코드의 일부를 치환할 뿐이다.    - 컴파일: 오브젝트 파일 생성    - 링커: 실행파일 생성#include #define NAME "TEST"#define PRINT_ADDR puts("주소: xxx-xxx");#define SQUARE(X) X*X.. 2025. 1. 28.
[C++] lower_bound, upper_bound 사용해보기 lower_bound, upper_bound▶ lower_bound(start, end, val) =  [start, end) 범위에서 val 이상인 첫 번째 원소 위치 반환▶ upper_bound(start, end, val) =  [start, end) 범위에서 val 을 초과하는 첫번째 원소 위치 반환Harbang lower_bound(Harbang first, Harbang last, const T& value);Harbang lower_bound(Harbang first, Harbang last, const T& value, Compare comp);Harbang upper_bound(Harbang first, Harbang last, const T& value);Harbang upper_bou.. 2025. 1. 27.
[C++] rvalue reference rvalue referencervalue 등호(=) 오른쪽에만 올 수 있는 것lvalue 등호(=) 오른쪽/왼쪽 모두 올 수 있는 것  [예제] lvalue와 rvalueint main(){ int v = 0; v = 100; // ok (v = lavlue) 20 = v; // error (20 = rvalue)}[예제] lvalue reference• lvalue만 가리킬 수 있다.• rvalue에 사용하면 errorint main(){ int v = 0; int& r1 = v; // ok int& r2 = 100; // error}  [예제] const lvalue refenece• lvalue와 rvalue 모두 가리킬 수 있다.int main(){ int v = 0; //.. 2025. 1. 27.
[C++] constexpr 키워드 constexpr• 컴파일 시간에 결정되는 상수 값• C++11 에서 도입된 문법• 템플릿 인자로 사용 가능• 상수식 계산, 배열 크기 정의 등 컴파일 시간에 최적화되는 코드 작성에 유용  const 키워드 비교값 초기화 이후 변경할 수 없다는 것에서는 동일하다.#include void main(){ const int x = 5; x = 3; // error constexpr int y = 6; y = 2; // error}  Q) 그렇다면 어떤 차이가 있을까?상수값은 컴파일, 실행 시점 등 정해지는 시기가 다를 수 있다.#include void main(){ const int x = 5; int arr1[x]; // ok int temp = 3; const .. 2025. 1. 26.
[C++] static_cast 사용 방법 및 필요성 static_cast 필요성C 언어에서도 type casing 가능하지만논리적으로 위험한 캐스팅을 대부분 허용해서개발자 의도 인지 실수 인지 구분하기 어렵다.  [예제 코드]void* -> 다른 타입으로 캐스팅하는 것은위험하기 보다 필요한 캐스팅에 해당 하다.#include int main(){ // C Style int* p = (int*)malloc(sizeof(int) * 100); free(p); }  하지만int* -> 다른 타입(double*) 캐스팅 하는 것은4 Byte 할당한 곳에 8Byte 담는 것이기 때문에의도치 않은 결과를 야기할 수 있다.int main(){ int N = 100; double* p = (double*)&N; *p = 3.14;}static_cast논.. 2025. 1. 26.
[C++] 람다 표현식 lambda expression 람다 표현식 lambda expression• C++11 도입 • 익명의 함수(객체) 생성 • 함수 주소가 필요한 위치에 함수 구현 자체 표기 • auto 변수에 함수처럼 사용 • 특정 상황에서 일반 함수보다 빠르다. • 지역 변수 캡처 (capture local variable)[예제] 람다 표현식 적용 내림 차순 정렬할 때 sort 함수에 cmp 함수를 인자로 주었다.#include // 내림 차순bool cmp(int a, int b) { return a > b; } int main(){ int x[5] = { 1, 3, 5, 2, 4 }; std::sort(x, x + 5, cmp); for (auto v : x) { printf("%d ", v); // 5, 4, 3, 2, 1 }}  📌 .. 2025. 1. 25.
[C++] const_cast 필요성 및 활용 const_cast 필요성C언어 캐스팅으로 const 주소를 받아서값을 다르게 해볼 수 있다.#include int main(){ const int c = 100; int* p = (int*)&c; *p = 5; std::cout   엄격한 제한을 두지 않는 C Style Casting 이기 때문에개발자가 의도한 것인지 분명하지 않다.const_cast 활용C++에서는 const_cast 활용하여상수성을 제거할 수 있다.(static_cast와  reinterpret_cast 에서는 error 발생)int main(){ const int c = 100; int* p = const_cast(&c);}  C++에서는 casting 마다 역할이 있기 때문에필요하다면 각 역할에 맞게 중첩 캐스팅 해볼.. 2025. 1. 22.
[C++] reinterpret_cast 필요성 및 사용 방법 reinterpret_castreinterpret_casttype_id>(expression);→ reinterpret_cast바꿀 타입>(대상); • 메모리 재해석 • 서로 다른 타입 주소 캐스팅 • 정수 ↔ 주소 사이 캐스팅 C++에서는 주로 static_cast 활용하는데 다른 타입으로 변환하며 error 발생한다.#include int main(){ int harbang = 100; char* p = static_cast(&harbang); // error char& r = static_cast(harbang); // error}  아래와 같이 다른 타입으로 캐스팅 시 활용된다.#include int main(){ int harbang = 100; // int -> char ch.. 2025. 1. 21.
[C++] [STL] Vector 사용 방법 Vector 동적으로 원소를 추가하고 크기를 자동으로 늘려준다.C++ 표준 라이브러리(STL) → #include  - front() : 첫 번째 원소- back() : 마지막 원소- begin() : 첫번째 위치- end() : 마지막의 다음 위치- size() : 원소 개수- capacity() : 할당된 공간 크기- push_back(value) : vector 끝에 원소 삽입- pop_back() : 끝에 있는 원소 삭제- insert(index, value) : index 위치에 원소 삽입- erase(iter) : vector의 iter 위치의 원소 삭제- erase(iter1, iter 2) : [iter 1, iter 2) 앞 까지 원소 삭제 - resize(size), resize(siz.. 2025. 1. 20.
[C++] 레퍼런스 Reference 레퍼런스 (reference, 참조)이미 존재하는 변수에 추가적인 별칭 부여#include int main(){ int n = 10; int& r = n; r = 20; // 값 변경 std::cout   C 언어에서는 void swap(int* p1, int* p2) 와 같이call by pointer 방식을 사용했다면 C++에서는 void swap(int& r1, int& r2) 와 같이call by reference 형태가 가능하다.포인터 방식보다는 간결하게 코드를 작성할 수 있다. #include #include void swap(int* p1, int* p2){ int temp = *p1; *p1 = *p2; *p2 = temp;}void swap(int& r1, int& r2){ int te.. 2025. 1. 19.
반응형