본문 바로가기

분류 전체보기

(8)
형변환에 대하여 1. 형변환은 왜 일어날까 ? 상식적으로 우리는 2 + 1.625 = 3.625 라고 생각합니다. 그러나 0 과 1 밖에 모르는 컴퓨터 입장에서는 둘을 그냥 더한다면 예상치 못한 값이 나오게 됩니다. 보통 정수를 int 에 저장한다면 2 의보수법 , 실수를 float 에 저장한다면 IEEE 754 표준의 부동소수점 변환을 이용합니다. 둘을 더한다면 11 이 나오게 됩니다. 우리의 상식과 생각보다 많이 멍청한 컴퓨터를 연결할 필요가 있는데 그 작업을 컴파일러 라는 프로그램이 형변환으로 담당해줍니다. 컴퓨터 입장에서는 자기가 멍청하다는 것을 들키지 않기 위해 형이 같은 경우만 연산합니다. 보통 형변환은 우리가 모르게 컴파일러가 암묵적으로 해주기 때문에 어떤 경우에 형변환이 일어나는 지 파악하는 것은 중요합니..
자료형에 대하여 저는 자료형에 대한 이해가 다른 C 문법을 배울때나 예제 코드를 분석할 때 큰 도움이 되었습니다. 오늘은 지금까지 제가 이해한 자료형에 대하여 정리해 보겠습니다. 1. 자료형이란 무엇일까 ? 책에는 다음과 같이 적혀 있습니다. 결국 컴퓨터는 0 혹은 1 이라는 말 들어 보셨나요 ? 현실 세계에 존재하는 어떠한 데이터든 컴퓨터에서 다룰려면 0 혹은 1 로 표현할 수 있어야 합니다. 이런 데이터들을 저장할 때 정수인지 문자인지 구분 없이 저장한다면 , 나중에 0 , 1 모음을 컴퓨터가 어떤 데이터 인지 판별할 때 까다롭게 느낄 것입니다. 따라서 자료형을 제시하여 컴퓨터가 0 ,1 모음을 표현하고 판단하는 기준이 되게 하였습니다. 그렇다면 자료형을 통해 우리는 어떤 내용을 알 수 있을까요 ? 위의 책 내용에서..
C 에서 i = ++i 나 a[i++] = i 를 쓰면 안되는 이유 표현식 i = ++i 나 a[i++] = i 를 쓰게될 경우 이는 C 표준에서 undefined behavior 입니다. 이식성 있는 코드를 작성하고 싶다면 위와 같은 표현식은 피하는게 좋습니다. 그렇다면 왜 undefined behavior 일까요 ? 이를 위해 side effect , sequence point 라는 개념에 대해 먼저 알아 봅시다. 1. side effect 우리는 보통 연산자가 피연산자의 값을 바꿀 것이라고 기대하지는 않습니다. 가장 평범한 연산자인 산술연산자의 경우 피연산자 i , j 에 대해 특정 연산을 하지 i , j 값 자체를 바꾸지는 않습니다. #include int main(void){ int i = 1 , j = 1 ; i + j ; i - j ; i * j ; i / ..
undefined behavior ? unspecified behavior ? implementation defined behavior ? C / C++ 에서는 3가지 behavior 를 정하고 이 표현을 적극적으로 활용합니다. ' 이 code 는 unspecified 하다. ' , ' 이는 implementation - defined 이다. ' 이런식으로 말입니다. 3가지 behavior 의 존재 이유와 각각의 behavior 가 무엇을 의미하는 지 , 그리고 어떤 예시가 있는 지 알아 보겠습니다. 3가지 behavior 를 정의한 이유 ? 이를 위해 프로그램의 이식성에 대해 알아야 합니다. 위키백과 이식성을 검색하면 다음의 내용이 제일 처음 나옵니다. A computer program is said to be portable if there is very low effort required to make it run on differen..
window 에서 표준 C89 , C99 컴파일 하는법 - 2 https://hell0computer.tistory.com/3 에서 VMware 까지 다운로드를 완료하였습니다. 이어서 가상머신에서 linux 를 사용하여 GCC C 컴파일러를 사용해 보겠습니다. 3. CentOS 설치 linux 를 사용하기 위해서는 CentOS 의 설치가 필요합니다. https://www.centos.org/download/ 다음의 링크에서 다운로드 해봅시다. 빨간 타원을 클릭합니다. 위의 5가지 링크중 하나로 들어갑니다. (아무거나 들어가도 상관 없습니다 !) .iso 파일 중 하나를 선택하여 다운로드 합니다. 저는 10분정도 걸렸습니다. 다운로드 완료후 VMware 을 실행하여 Home 에서 Create a New Virtual Machine 을 클릭합니다. 그러면 위의 창이 나..
window 에서 표준 C89 , C99 컴파일 하는법 - 1 1. visual studio ? visual studio 의 C 컴파일러는 아쉽게도 표준을 정확히 지키지 못합니다. 몇 가지 microsoft 확장 기능이 포함되어 있으며 , C99 의 몇몇 표준은 지원하지 않습니다. 이는 학습자에게 혼란을 줄 수 있습니다. 내가 짠 코드가 비표준이지만 확장 기능 때문에 잘 작동할 수도 있기 때문입니다. 또한 표준을 정확히 배우지 못한 프로그래머는 방언 C를 의도와 다르게 작성하여 컴파일러마다 다른 결과를 초래하는 프로그램을 작성할 위험이 있습니다. 이문제를 해결하기 위해 , linux 운영체제를 이용해 gcc 의 표준을 지키는 컴파일러를 사용하는 법을 알아 봅시다 ! 2. VMware 설치하기 window 컴퓨터에서 linux를 이용하기 위해서는 가상머신을 다운로드 ..
내가 생각하는 컴공에서 C를 배우는 이유 / C 표준에 대하여 1. 컴공에서 C를 배우는 이유 대부분의 컴공 신입생은 1학년 때 C를 배우게 된다. 나 또한 이유는 몰랐지만 학교 커리큘럼 상 C를 처음 프로그래밍 언어로 배웠다. 심지어 우리학교는 단과대학 전체가 수능 처럼 2번 프로그래밍 시험을 봐서 일정 점수에 도달하지 못하면 재수강 해야 했다. 왜 C를 배워야 하는 걸까 ? 다른 좀 더 트랜디(?)한 언어들 ( javascript , python , kotlin ) 로 시작하면 안될까 ? 이를 위해 첫째 , C가 어떻게 개발 되었는 지 / 그에 따라 어떤 특징이 있는지 알아보자. 1960년대 후반 Ken Thompson 이라는 사람은 벨 연구소에서 UNIX 라는 운영체제를 어셈블리어로 개발하고 있었다. 어셈블리어는 기계어(CPU가 해독할 수 있는 언어)와 일대일..
군생활 기록 2023년 3월 5일 드디어 길고도 길었던 20개월의 군생활이 마무리 되었다. 나는 대형차량운용병으로 진해의 한 해군 부대에서 복무하였다. (해군이지만 배는 타지않았다) 그냥 흘러보내면 까먹을 것 같아서 이글을 통해 복무하면서 어떤 것을 했는지 , 어떤 일이 있었는지 기록해 볼까 한다. 1. 1종 대형면허 내 직별은 대형차량운용병 이었다. 사회에서 일반인이 몰기 힘든 45인승 버스 , 2.5톤 화물트럭을 운전하는 법을 교육받고 자대에서 운전하였다. 처음에는 시동도 꺼먹고 차선도 못 맞춰서 많이 혼났는데 점점 차에 적응하게 되자 버스나 트럭이나 승용차나 길이 빼고는 비슷비슷 하다는 걸 깨닫게 됐다. 군에서 일정 기간 , 일정 km 수 이상 , 대형차량 운전을 하면 사회 면허를 1종 대형으로 갱신 해준다. ..