전체 글 46

C언어를 공부하면서 느낀점

기존에 학원에서 java언어를 배우고 웹페이지 관리일을 하면서 java, java script, jsp등 관련된 언어만 사용해 C언어에 대한 관심과 배워야할 필요성을 느끼지못했다. 대학교때 처음으로 접한 언어지만 그당시에는 언어에대해 크게 매력을 느끼지못했고 기억나는건 자료형, 연산자, 조건/반복문, 배열에 대한 기본적인 지식들만 기억이 나고 포인터 이후로는 이해가 잘 가지않아 그 뒤로는 깊게 배우지못했던것같다. 그 후로 C++을 공부하다 포인터를 다시 접했을때 C언어부터 다시 배워보고싶다는 생각을했다. 바로 인터넷에서 C언어 책 한권을 구매해 처음부터 다시 확인해보자는 마인드로 정독했는데 전체적인 틀은 java와 비슷하게 되어있어 초반을 넘어가는데는 빠르게 읽고 넘어갔던거같다. 책의 전체적인 흐름은 "..

일상 2024.03.11

윤성우의 열혈 C 프로그래밍 도전4

도전1 구조체 배열을 이용한 도서 정보 출력 typedef struct { char name[50]; char writer[50]; int pageSize; } BOOK; int main(void) { BOOK bookList[3]; for (int i = 0; i < 3; i++) { printf("저자: "); gets_s(bookList[i].writer, 50); printf("제목: "); gets_s(bookList[i].name, 50); printf("페이지 수: "); scanf_s("%d", &bookList[i].pageSize); getchar(); } printf("\n도서 정보 출력\n"); for (int i = 1; i < 4; i++) { printf("book %d\n",..

C 2024.03.04

스택 프레임

스택 프레임(stack frame) 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다. 함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장됩니다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다. 이러한 스택 프레임 덕분에 함수의 호출이 모두 끝난 뒤에, 해당 함수가 호출되기 이전 상태로 되돌아갈 수 있습니다.

C++ 2023.07.06

C++ 열거형

상수로 표현했지만, 양이 많아질경우 따로 노는 느낌 const의 경우 초기값이 필수로 들어가야함 메모리에 올라가지않을수있음 함수쪽에서 사용될때 지정된 값들로 변경되서 사용되기때문에 주소값없이 메모리에 올라가지않을수있음 주소를 참고하는 경우에는 메모리에 올라감 // 메모리가 사용됨 const int test1 = x; const int test2 = y; const int test3 = z; 하나의 세트로 관리하고싶을경우 열거형 사용 enum enum은 초기값을 지정하지않으면 첫 값은 0부터 시작 ex) ENUM_X = 0; 그 다음 값들은 이전 값 + 1 ENUM의 경우 메모리에 올라가는것없이 완벽하게 값들로 대체되서 사용됨 enum ENUM_XX ex) Player Type등.. 이름 지정 { ENUM..

C++ 2023.07.03

C++ 유의사항 1)

1) 변수의 유효범위 전역 변수는 유효범위가 따로 존재하지않음 특정 함수 내부에서 변수를 지정했을경우(스택) { } 중괄호의 범위가 생존 범위 - 같은 이름 두번 사용할 때 문제 2) 연산 우선순위 괄호를 이용해서 가시성을 높여줄수 있음 3) 타입 변환 캐스팅할 경우 타입에 따라서 값이 변경될수있음 각자 허용되는 byte단위 확인필요 ex) int x = 77777 > short로 캐스팅시 12241로 변환됨 위쪽에있던 비트 데이터가 짤린 상태로 저장 int > float 실수로 변환할 때 정밀도 차이가 있기 때문에 데이터 손실이 일어날수 있음 int > unsigned int 비트 단위로 보면 똑같은데, 분석하는 방법이 달라져 값이 변경될수 있음 4) 사칙 연산 관련 데이터형에 따른 오버플로우 조심해야..

C++ 2023.06.21

비트와 바이트

비트와 바이트 비트 (binary difit, bit) 0과 1, 두 가지 값만 가질 수 있는 측정 단위 0 OFF FALSE, 1 ON TRUE 바이트 (Byte) 여덟 개의 비트로 구성된 데이터의 양을 나타내는 단위 10진수 ( 0 1 2 3 4 5 6 7 8 9 ) 10 11 12 13 ... 19 20 2진수 ( 0 1 ) 0 1 10 0b0 0b1 0b10 0b11 0b100 0b란 2진수를 표현하는 방법 16진수 ( 0 1 2 3 4 5 6 7 8 9 A B C D E F ) 0x란 16진수를 표현하는 방법 bit에서 음수를 찾는방법 0 -> 1 1->0 으로 변경하고 +1 하면 음수가 됨 ex) 0101 0110 = 86 1010 1010 = -86 2의 보수 방법 bit의 항상 마지막은 음수

일상 2023.04.14

SASM 어셈블리언어 (2)

메모리와 레지스터의 값 주소 확인 메모리 레지스터 값의 연관성?을 확인하는 과정 section .data - 초기화 된 데이터 - [변수이름] [크기] [초기값] - [크기] db(1byte) dw(2byte) dd(4byte) dq(8byte) section .bss - 초기화 되지 않는 데이터 - [변수이름] [크기] [개수] - [크기] resb(1) resw(2) resd(4) resq(8) - data와 bss의 차이는 초기화 되는지 여부인데 bss를 사용하면 용량을 줄일 수 있음.. 레지스트 -> 메모리 .data에 변수를 선언하고 해당 데이터를 레지스터에 옮기며 해본 결과 mov rax, a(.data에서 선언한 값)를 쓰면 변수 a의 주소값을 rax에 복사하는것에 불과함 SASM에서..

C++ 2023.04.14