묻공러
'분류 전체보기' 카테고리의 글 목록 (35 Page)

분류 전체보기

C/[코드조선] C 핵심

[C] 변수의 종류

변수의 종류 1. 지역 변수 2. 전역 변수 3. const 변수 4. static 변수 5. extern 변수 지역 변수(Local Variable) 스택 메모리에 저장되는 블럭 스코프 내에 선언된 변수이다 함수가 종료되면 스택 프레임이 반환되면서 더 이상 접근 불가능하다 전역 변수(Global Variable) 데이터 섹션에 저장되는 파일 스코프에 선언된 변수이다 const 변수 const 키워드를 붙이면 해당 변수를 상수화 시켜주는 것이다 초기화가 강제되고 초기화 이후에 값을 변경할 수 없다 매크로 상수는 변수가 아니라서 메모리를 차지하지 않는 반면, const 변수는 메모리를 차지한다 static 변수 static 변수는 크게 2가지 특징을 가지고 있다 1. 선언이 된 해당 범위에서만 유효하고 해..

C/[코드조선] C 핵심

[C] 스코프와 스택프레임

스코프의 종류 1. 블럭 스코프(Block Scope) 2. 파일 스코프(File Scope) 3. 함수 스코프(Function Scope): goto-label문과 관련 있음. 4. 함수 선언 스코프(Function Declaration Scope): 매개변수 목록과 관련 있음. 블럭 스코프(Block Scope) vs. 파일 스코프(File Scope) 조건문, 반복문, 함수 같은 문(statement)에 사용되는 중괄호 범위를 블럭 스코프라고 하고 지역변수가 저장된다 어떤 블럭 스코프에도 속하지 않는 파일 내 범위를 파일 스코프라고 하고 전역변수가 저장된다 여기서 파일이란 Translation Unit 범위로 볼 수 있으며 Translation Unit 범위는 전처리 과정에서 일어나는 #includ..

C/[코드조선] C 핵심

[C] 2차원 배열

2차원 배열 1차원 배열에서 한 차원을 추가한 것이지만, 실제로 메모리에서는 1차원 배열을 이어 붙인 형태이다 1차원 배열의 선언 방법에서 왼쪽으로 추가해서 사용하면 된다 왼쪽부터 큰 차원이라고 생각하면 된다 예를 들어, 음료수 몇 병이 들어있는지 나타내는 1차원 배열은 arr1 [병의 개수] =... 몇 박스에 몇 병이 들어있는지 나타내는 2차원 배열은 arr2 [박스의 개수][병의 개수] =... 이처럼 왼쪽이 더 큰 차원을 의미한다 int arr[ARR_HEIGHT][ARR_WIDTH] = { { 1, 2, 3, 4, }, { 5, 6, 7, 8, }, { 9, 10, 11, 12, }, {13, 14, 15, 16, }, {17, 18, 19, 20, } };

C/[코드조선] C 핵심

[C] 반복문

i++ vs. ++i 후치를 우선적으로 사용하고 이 줄에서 증가하면 안 되는 특별한 경우에만 전치를 사용하는 것이 좋다 break vs. continue break는 가장 가까운 반복문 '하나'를 빠져나간다 continue는 아래 부분을 생략하고 다시 반복문 처음(조건) 부분으로 간다 이중 반복문 이중 반복문의 결과는 아래의 과정을 거치면 쉽게 파악할 수 있다 1. 줄의 개수를 파악하고 인덱싱(번호매김) 2. 각 줄의 칸 개수를 파악하고 인덱싱 3. 각 칸의 출력을 파악 #include int main(void) { int i, j; for (i = 1; i

C/[코드조선] C 핵심

[C] 조건문과 Intentional-Fallthrough

조건문을 사용할 때 좋은 습관 1가독성을 높이고자 중괄호(스코프)를 생략하는 사람이 정말 많다중괄호(스코프)를 사용해서 명시적으로 표현해 주어서 헷갈리는 상황이 혹여나 발생하지 않도록 확실하게 표시하자if (a   조건문을 사용할 때 좋은 습관 2값의 범위를 조건식에 적을 때는 가독성에 신경을 쓰는 것이 좋다if(a >= 0 && a   Intentional-Fallthrough switch-case 문에서,고의적으로 case 내부에 break 구문을 적지 않은 경우를 의미한다c++ 17부터는 [[fallthrough]]; 를 사용하면 된다 switch (value){case 1: 명령어1; /*Intentional-Fallthrough*/ // 위처럼 주석을 달아주어서 가독성을 높이는 것이..

C/[코드조선] C 핵심

[C] 연산자

정수 피연산자와 실수 피연산자의 연산같은 자료형의 피연산자들 간의 연산이 일반적이지만,다른 자료형의 피연산자들간의 연산을 해야 하는 경우가 있을 수 있다 이들의 결과는 피연산자들의 자료형 중 한쪽 자료형만을 따르게 되기 때문에주의해서 사용해야 한다이런 경우가 발생하지 않기 위해서는 형변환을 해주는 것이 좋다  복합 대입 연산자 산술 연산과 대입 연산이 함께 계산되는 연산자를 의미한다// *= (복합 대입 연산자)은 곱셈과 대입이 한 번에 이뤄진다mul *= 3; // mul = mul * 3;  증감 연산자 (전치 / 후치)전치는 지금 바로 연산이 이루어지고 후치는 해당 줄에서 가장 마지막으로 처리되기에 다음 줄에 연산이 된다고 생각하면 된다int a = 1;int b = 1;int prefix = 1 ..

C/[코드조선] C 핵심

[C] 탈출 문자열(Escape Sequence)과 서식 지정자(Format Specifier)

탈출 문자열(Escape Sequence) 탈출 문자 ’\’와 함께 작성된 문자열은 위와 같다 C언어에서 문자열은 시작 큰 따옴표와 끝 큰 따옴표로 감싸져 있다 이 문자열 도중에 위와 같은 다른 의미를 가지는 문자열을 넣으면, 잠시 문자열을 탈출하기에 탈출 문자열이라고 부른다 서식 지정자(Format Specifier) printf(), scanf() 함수와 같은 입출력 함수들과 함께 쓰면서 양식에 맞게 입출력 할 수 있게끔 도와주는 지정자이다 문자열의 원하는 위치에 서식 지정자를 넣어서 사용한다 자주 쓰이는 서식 지정자는 아래와 같다 %d: decimal의 약자. (10진수) %o: octal의 약자. (8진수) %x: hexadecimal의 약자. (16진수) %u: unsigned의 약자. (양수)..

C/[코드조선] C 핵심

[C] 컴파일과 빌드

빌드 프로세스(Build Process) 위 사진처럼 빌드의 과정이 진행이 된다 특히, 컴파일이라는 용어는 2가지 의미를 가진다 전처리 과정을 끝낸 소스코드를 어셈블리 코드로 전환하는 과정을 컴파일한다고 부르기도 하지만 넓은 의미로는, 고급언어로 작성된 코드를 기계어로 전환하는 일련의 과정을 통틀어서 컴파일한다고 부른다 컴파일과 빌드 앞서 설명한 것처럼, 컴파일은 두 가지 의미를 가지고 있다 1. 확장된 소스코드가 어셈블리 코드로 변환되는 과정 2. 소스코드부터 오브젝트 코드까지의 과정 빌드는 위 그림의 전체 과정을 빌드라고 한다 따라서, 빌드는 컴파일 + 링킹이라 할 수 있다 컴파일러 컴파일과 마찬가지로 두 가지 의미로 해석이 된다

C/[코드조선] C 핵심

[C] Low-Level Language와 High Level Language

언어는 위와 같은 형태로 구분이 된다 기계어(Low-Level Language, Machine Language) 기계(컴퓨터)가 바로 이해할 수 있는 언어를 기계어라고 한다 2진법으로 작성하면 너무 길어지기 때문에 위처럼 16진법으로 보여주는 것이 일반적이다 어셈블리어(Assembly Language) 이진 패턴의 부분들을 문자로 치환하여 조금은 보기 쉽도록 작성된 언어를 어셈블리어라고 한다 고급 언어(High-Level Language) C언어 혹은 C++, Java, Python과 같은 언어들을 의미한다 사람에 가깝다는 의미에서 High-Level Language라고 부름. 결국 컴퓨터는 기계어만 이해가 가능하기에, 사람이 고급 언어로 작성하면 누군가는 번역해서 컴퓨터가 읽기 쉬운 기계어로 바꿔주는 ..

C/[코드조선] C 핵심

[C] 와일드 포인터(Wild pointer) 댕글링 포인터(Dangling pointer)

와일드 포인터(Wild pointer) 초기화하지 않아서 쓰레기 값이 채워져 있는 포인터를 의미한다 int *p1;// 와일드 포인터 // 해결 방법 int *p2 = nullptr; // 해결 방법 (언리얼) UPROPERTY() int *p3; 언리얼에서는 언리얼 오브젝트의 속성을 정하는 UPROPERTY() 매크로 작성하면 자동으로 nullptr로 초기화가 된다 UPROPERTY() 매크로를 작성하지 않으면, 와일드 포인터가 발생할 수 있음에 유의해야 한다 댕글링 포인터(Dangling pointer) 해제된 메모리 영역을 가리키고 있는 포인터를 의미한다 int* p = new int(10); delete(p) *p = 100;// 댕글링 포인터 int* p = new int(10); delete(..