포인터의 종류 데이터 포인터 : 데이터 세그먼트, 힙 세그먼트, 스택 세그먼트에 있는 '변수의 주소', '메모리의 주소'를 저장 함수 포인터 : 코드 세그먼트에 있는 '명령문의 주소'를 저장 함수 포인터란? 함수 포인터란 특정 함수를 구성하는 시작 명령의 위치를 가리키는 포인터입니다. 예를 들어, 다음과 같은 함수가 있다고 했을 때, ' int result = 0; '이 Sum 함수의 시작 주소가 되는 것입니다. 이 때, 함수 첫 번째 명령문의 주소 값은 함수의 이름 앞에 &를 적음으로써 얻을 수 있습니다. 함수 포인터 선언하기 기존에 데이터 포인터를 선언할 때에는 자신이 가리킬 대상의 크기를 같이 명시해 줬듯이, 함수 포인터를 선언할 때는 자신이 가리킬 함수의 함수 원형을 명시해주어야 합니다. 예를 들..
Language/C 및 C++
C언어로 작성한 '소스 파일'은 컴파일 작업과 링크 작업을 거쳐 기계어로 이루어진 '실행 파일'이 됩니다. 그런데 이 실행 파일에 있는 명령들은 CPU가 직접 실행할 수 없습니다. CPU가 이 명령들을 실행하려면 먼저 운영체제가 실행 파일의 명령들을 메모리에 재구성해주어야 합니다. 이렇게 운영체제에 의해서 명령들이 메모리에 재구성된 것을 '프로세스(Process)'라고 합니다. 이렇게 메모리에 프로세스가 구성되면 CPU는 프로세스에 저장된 명령들을 실행할 수 있기 때문에, 프로세스를 '실행 중인 프로그램'이라고도 부릅니다. 프로세스에서 여러 가지 정보를 기억하는 메모리 공간을 '세그먼트'라고 부릅니다. 즉 프로세스는 세그먼트의 집합으로 구성되어 있습니다. 프로세스의 세그먼트는 다음과 같이 구성되어 있습니..
#ifdef 전처리기 ifdef는 if define의 줄임말, 즉 '만일 define되어 있다면~'이라는 뜻입니다. MY_DEBUG가 #define문으로 선언되어 있으면 #ifdef ~ #endif 사이에 있는 구간이 실행이 됩니다. 디버그를 해보고 싶을 때는 '#define MY_DEBUG' 한 줄만 써넣어주면 되고, 디버그를 하고 싶지 않을 때에는 '#define MY_DEBUG'를 간단하게 삭제만 해주면 됩니다. #ifndef 전처리기 ifndef은 if not define의 줄임말, 즉 '만일 define되어 있지 않다면~'이라는 뜻입니다. MY_DEBUG가 #define문으로 선언되어 있지 않기 때문에 #ifndef ~ # endif 사이에 있는 구간이 실행됩니다. 조건부 컴파일 조건부 컴파일이..
아스키 코드 아스키는 컴퓨터에서 문자를 숫자로 표현하기 위한 약속입니다. 즉 컴퓨터가 문자를 이해할 수 있는 이유는 문자 하나하나에 숫자를 부여했기 때문입니다. 예를 들어 문자 'a'를 입력하면, 컴퓨터는 이에 해당하는 숫자 97로 치환하여 이해하는 것입니다. 문자의 아스키 값은 부호 없는 1 byte에 저장됩니다. 아스키 코드는 초창기 128개(7 bit)였으나 이후에 128개를 새로 추가해 256개(1 byte)까지 확장되었습니다. 자료형 1. 정수 자료형 자료형 signed unsigned char short long char short long 범위 -128 127 -32,768 32,767 -2,147,483,648 2,147,483,647 0 255 0 65,535 0 4,294,967,295..
소스 파일(*.c) 소스 파일은 프로그래머가 만들고 싶은 프로그램을 직접 작성한 파일을 말합니다. 파일 확장자는 .c를 사용하는데, 반드시 지켜야하는 것은 아니지만 c언어 소스 파일을 구별하기 위해 왠만하면 지켜주는 것이 좋습니다. 개발자는 보통 소스 파일까지만 작성하고, 그 이후는 개발 도구가 알아서 처리합니다. 만일 실행 파일로 번역하는 과정에서 오류가 발견되면 오류 메시지를 출력하고 목적 파일이 만들어지지 않습니다. ※ 여러가지 확장자 C C++ C# Java .c .cpp .cs .java 목적 파일(*.obj) 목적 파일은 컴파일러가 소스 파일을 번역하면 만들어지는 파일입니다. 실행 파일(*.exe) 실행 파일은 컴퓨터에서 바로 실행할 수 있는 파일을 말합니다. 하나 이상의 목적 파일을 링크하여..
기본 서술 형식 1. 단일 서술문 단일 서술문은 ; 세미콜론으로 구분된 한 줄로 이뤄진 서술문입니다. 2. 복합 서술문 복합 서술문은 여러 개의 단일 서술문이 모인 것으로 { } 중괄호를 이용해 하나로 묶습니다. 역할에 따른 서술 형식 1. 수식 서술문 수식 서술문은 계산 수식을 작성한 단일 서술문입니다. 2. 조건 서술문 조건 서술문은 if 등을 이용하여 조건을 만족하면 지정한 서술문을 수행하도록 작성한 서술문입니다. 3. 반복 서술문 반복 서술문은 for 또는 while 등을 이용하여 지정한 서술문을 바복해서 수행하도록 작성한 서술문입니다. 4. 라벨 서술문 라벨 서술문은 소스 파일의 특정 위치에 라벨을 지정하고 goto문을 이용해 그 위치로 이동할 수 있도록 작성한 서술문입니다. 5. 분기 서술문 ..
배열 초기화하기 방법1. 반복문 이용 방법2. 초기화 문법 이용 int a[5] = { 0 }; int a[5] = {0, }; 둘다 int a[5] = {0, 0, 0, 0, 0};과 같습니다. int a[5] = {3, }; → int a[5] ={3, 0, 0, 0, 0}; 과 같습니다. 즉 쉼표 뒤에 생략된 부분은 모두 0으로 처리합니다. 즉 0이 아닌 다른 값으로 (이를테면 {3, 3, 3, 3, 3}으로) 초기화하고 싶다면 반복문을 사용하는 것이 좋습니다. 또, 초기화 문법은 배열은 선언할 때만 사용할 수 있습니다. 배열 크기 생략하기 초기화를 정확하게 해준다면 배열 크기는 생략하고 빠르게 작성할 수 있습니다. 이를테면 int a[ ] = {1, 2, 3, 4, 5}; → int a[5] = ..
C언어의 등장배경 1960년대 개발되었던 운영체제들은 하드웨어에 종속적인 언어를 사용하여 개발되었습니다. 즉, 하드웨어가 바뀌면 운영체제의 많은 부분들도 같이 변경해줘야하는 번거로움이 있었습니다. 이러한 불편함을 없애고자, 벨 연구소의 데니스 리치와 켄 톰슨은 하드웨어와 독립적인 운영체제를 만들기 위해 노력합니다. 이러한 운영체제를 만들려면 그에 맞는 새로운 언어가 필요했습니다. 1970년에 켄 톰슨이 B 언어를 만들었지만 실패하고, 2년 후 새로운 언어를 개발하게 되는데 이것이 바로 C언어입니다. 그리고 이러한 C언어를 이용해 개발한 운영체제가 바로 유닉스입니다. C언어의 특징 1. 구조화된 언어 C 언어 이전의 프로그래밍 언어들은 작업 단위가 구분되지 않고 단순히 나열된 형식이었습니다. 반면 C언어는..