알고리즘 공부를 할 때 알아야 하는, 알면 좋은 개념들을 정리해보았다. 지속적으로 추가할 것이다.
#include<헤더파일> 과 #include "헤더파일" 의 차이점.
- #include <헤더파일>은 '컴파일러가 설치된 폴더'에서 해당 헤더 파일을 찾으라는 지시이다.
- #include "헤더파일"은 '현재 소스 파일이 존재하는 폴더에서 해당 헤더 파일을 먼저 찾고 없으면 '컴파일러가 설치된 폴더'에서도 찾는다.
- 사용자가 만든 헤더파일이나 추가 외부 라이브러리를 포함하고 싶은 경우 사용한다.
정규 표현식(Regular expression)
: 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어.
- 특정한 조건이나 패턴이 있는 문자열을 간단하게 표현할 수 있다.
- c++ 의 경우 C++ 11부터 사용 가능하다.
- regex 헤더 파일에 선언되어 있다.
- 장점
- 입력받은 문자열을 간결하게 처리할 수 있다.
- 정규 표현식은 다양한 언어와 프로그램에서 지원하기 때문에 범용성이 뛰어나다.
- 실제 개발 시 수많은 문서와 문자열을 처리해야 하는데 정규 표현식을 잘 활용하면 생산성을 증대시킬 수 있다.
- 정규 표현식(c++로)을 사용할 기회가 생기면 참고할 글 : https://modoocode.com/303
배열의 크기(int arr[MAX])
- 배열의 크기는 컴파일타임(프로그램 실행 전 컴파일하는 시기)에 결정되어야 한다.
- 일반적인 변수 선언이나 const 상수는 런타임에 결정되므로(런타임 상수라 한다) 이를 사용하면 에러가 뜬다.
- 따라서, 전처리기 매크로 상수(#define)을 통해 정의할 수 있다. ex) #define MAX 1000
- # : 전처리 지시자. 즉, #define : 컴파일 이전에 정의하라
- 주의할 점 : 세미콜론(;)을 붙이지 않는다. - c++은 const가 경우에 따라 런타임 상수도 될 수 있기 때문에 const 상수로 배열 크기를 선언하는 것이 가능하다.
2차원 배열 Call by value
- 2차원 배열은 Call by value가 불가능하다. 2차원 배열 자체가 구조적으로 포인터이기 때문이다.
- 즉, 2차원 배열을 매개변수로 넘기는 것 자체가 Call by Reference를 의미한다.
- 만약 2차원 배열 형태의 변수를 Call by value로 넘기고 싶다면 2차원 벡터를 활용하자.
컴파일 타임과 런타임.
컴파일 타임(Compile time)
- 소스 코드가 기계어 코드로 변환되어 실행 가능한 프로그램이 되는 과정 즉, 컴파일 과정 시간을 컴파일 타임이라 한다.
- 컴파일 에러 : 프로그램이 성공적으로 컴파일되는 것을 방해하는 신택스 에러나 파일 참조 오류와 같은 에러.
런 타임(Run time)
- 컴파일 과정을 마친 프로그램이 동작되는 때를 런 타임이라 한다.
- 런타임 에러 :예상치 못한 오류 또는 충돌 등을 이유로 성공적으로 컴파일 되었더라도 프로그램이 실행 중에 발생하는 형태의 에러.
segmentation fault error
segmentation Fault는 세그멘테이션 위반으로, 세그폴트라고 줄여 쓰기도 한다.
세그멘테이션 오류 (core dumped) 라는 메시지의 오류가 뜨는 경우 주된 원인은 다음과 같다.
- 프로그램이 허용하지 않은 메모리에 접근을 시도하였을 경우.
- 허용되지 않은 방법으로 메모리 영역에 접근을 시도하였을 경우.
전역변수, 지역변수 초기화 차이.
- 지역변수는 Stack 메모리에 저장되고, 초기화하지 않은 전역변수는 BSS Segment에 저장된다.
- ※ BSS : Block Started by Symbol
- BSS 섹션에는 초기화 식을 갖지 않은 전역변수의 메모리 영역을 0으로 초기화한다.
- 이로 인해 전역 변수들은 기본적으로 0으로 초기화된다. - 지역변수는 별도의 초기화를 하지 않으면 trash 값이 저장되고, 전역변수는 0이 자동 저장되어 있다.
- c++ 표준 스펙상으로 전역변수들은 0으로 초기화되는 것이 보장된다고 한다.
반응형
'Algorithm' 카테고리의 다른 글
[백준 2638] 치즈 (1) | 2023.02.17 |
---|---|
[백준 2528] 사다리 (0) | 2023.01.13 |
[백준 14503] 로봇 청소기 (0) | 2023.01.04 |
[백준 17611] 직각다각형 (0) | 2022.12.31 |
'맞았습니다'가 뜨지 않는 이유.. (0) | 2021.09.05 |