Preface 프로그래밍을 하다 보면 static만큼 다양한 곳에서 다양한 의미로 많이 쓰이는 키워드가 없는 것 같습니다. C/C++과 같은 정적인 언어 뿐만 아니라 JAVA와 같이 동적 바인딩을 기본으로 하는 언어에서조차 static이 사용되는 것을 보면 옛 속담처럼 '귀에 걸면 귀걸이, 코에 걸면 코걸이'가 되는 것이 static이라는 키워드인 것 같습니다. 그러나 유감스럽게도 이렇게 자주 쓰이고 중요하게 사용되는 static을 잘못 이해하고 있거나 많은 특징들을 모르고 있는 사람들이 의외로 많습니다. 특히 시중에 판매되는 대다수의 프로그래밍 입문 서적들이 static에 대해서 정확하고 자세하게 설명하고 있지 않다라는 사실이 이렇게 부족하게 나마 static에 대한 글을 쓰게 된 이유라 할 수 있습니..
char* GetStr() { static char szStr[] = "Hello"; return szStr; } void PrintStr(char **str) { printf("%s",*str); } int main(int argc, char **arv) { PrintStr(&GetStr()); return 0; } 위 코드는 아래와 같은 컴파일 에러를 발생시킨다. error C2102: '&' requires l-value 컴파일러의 에러는, l-value. 즉, 어딘가에 저장된 값에만 주소 연산자를 사용할 수 있다는 말이다. 내가 이 코드를 작성한 의도는 char형 포인터의 포인터 (이중 포인터)를 매개 변수로 받는 PrintStr함수의 매개변수로, char형 포인터를 반환하는 GetStr함수의 반..
C 프로그래머가 알아야 할 것들 - Chapter 7 어셈블리 김성훈 (sunghun84@nate.com) (1) 어셈블리 언어 C언어는 다른 언어들 보다 어셈블리에 근접한 언어입니다. 인라인 어셈블리가 가능한 데다가, 메모리를 직접 다루는 것이 가능하며, C언어는 어셈블리어와 1:1대응까진 아니지만 대응 되는 언어이기 때문입니다. C언어로 작성한 코드는 컴파일러를 통해서 어셈블리어와 대응되는 오브젝트 파일로 반드시 변환이 되어야 해당 코드가 실행 될 수 있습니다. 어셈블리 언어는 그 코드가 어떤 일을 할지를 추상적이 아니라, 직접적으로 보여줍니다. 논리상의 오류나, 수행 속도, 수행 과정에 대해 명확히 해준다는 점에서 직관적인 언어입니다. 어셈블리 언어를 사용하면 메모리에 대한 이해도도 높아집니다. 우..
C 프로그래머가 알아야 할 것들 - Chapter 6 자료 구조 김성훈 (sunghun84@nate.com) (1) 자료 구조란? 프로그램이 어떤 일을 할 때에는, 그 일을 하기 위해 필요한 데이터가 존재 합니다. 예를 들어, 비디오 대여점 관리 프로그램을 작성한다고 생각해 봅시다. 우선 비디오 정보들이 필요합니다. 비디오의 정보에는, 비디오에 담긴 미디어의 작품 명, 감독, 출연진 (혹은 성우) 등과, 비디오의 위치, 대여료, 대여기일 등의 정보를 포함합니다. 그리고, 회원 정보도 필요합니다. 회원 정보에는, 회원의 이름, 나이, 주소, 전화번호, 대여한 비디오 정보가 포함 될 것입니다. 이 정보들이 있어야만, 비디오 대여 관리를 프로그램으로 처리 할 수 있습니다. 이런 정보들을 어떻게 저장하고 관리 ..
C 프로그래머가 알아야 할 것들 - Chapter 5 메모리와 포인터 김성훈 (sunghun84@nate.com) (1) 메모리를 알자 우리가 계산을 할 때에 일반적으로 데이터와 연산자가 필요합니다. 예를 들어, 1 + 2 라는 식을 계산 하기 위해선, 1과 2라는 데이터가 필요하고, + 라는 연산자가 필요하죠. 우리가 노트에 계산을 할 때에는 계산 결과를 노트에 표기 합니다. 계산 결과를 기록해 두는 이유는 그 계산 결과를 가지고 다른 연산을 해야 하거나, 그 결과 자체가 의미를 갖기 때문입니다. 컴퓨터에서 계산된 결과를 위해서 어떻게 해야 할까요? 바로 변수에 저장하면 됩니다. int a = 1 + 2; 이렇게 하면, 1 + 2 의 결과가 변수 a에 저장 됩니다. 아쉽게도(?) 변수 a도 결국 어딘가..
C 프로그래머가 알아야 할 것들 - Chapter 4 프로그램 언어 김성훈 (sunghun84@nate.com) (1) 왜 문법을 배워야 하는가? 한국어를 할 줄 모르는 독일인과, 독일어를 할 줄 모르는 한국인과 대화가 가능할까요? 바디 랭귀지로 하면 되지 않느냐는 분도 계시겠지만 그것도 어느 정도 한계가 있기에, 제대로 된 의사소통은 불가능할겁니다. 컴퓨터는 0과 1 (2진수)밖에 인식하지 못한다고 배웠습니다. 컴퓨터에게 명령을 내릴 때, 00001110 01010101 이런 식으로 모든 명령을 내려야 한다면 프로그램을 만드는 데에 드는 시간이 막대할 것입니다. 그래서, 기계어에서는 16진수 (2진수를 4개씩 묶어서) 표현하고 있습니다. 00001110 01010101 -> 0x0E55 2진수일 때보다..
C 프로그래머가 알아야 할 것들 - Chapter 3 운영체제와 컴퓨터 원리 김성훈 (sunghun84@nate.com) (1) 운영체제란? 초기에 컴퓨터는 컴퓨터를 키자마자 프로그램이 담겨 있는 디스크를 삽입해야만 했습니다. 그리고 특별한 경우를 제외하고는 다른 프로그램 사용시에는 재 부팅 시켜야만 했습니다. 이 방법은 매우 불편했습니다. (비디오 게임기들은 이 방식을 채용하고 있는 경우가 많습니다) 그래서 유닉스, MS-DOS등의 운영체제가 나오게 됐습니다. (참고로 MDIR은 운영체제가 아닙니다. 인터페이스를 제공해주는 프로그램이죠) 각 운영체제하에 프로그램을 구동시킨 후, 프로그램 종료 시에는 그 운영체제로 돌아오게끔 하는 방식을 취한 것이죠. 이전에는 그래픽 카드나 프린터, 사운드 카드마다 출력..
C 프로그래머가 알아야 할 것들 - Chapter 2 비트의 법칙 김성훈 (sunghun84@nate.com) (1) 비트가 뭐지? 비트란 이진수(Binary Digit )의 약자로써 컴퓨터에서 제어 가능한 데이터의 최소단위입니다. 하지만, 컴퓨터에서 입 출력할 때 사용하는 최소 단위는 바이트죠. 둘 다 최소단위라는 건 알겠는데 정확한 차이가 뭐냐고요? 비트란 저번 강좌에서 배웠던 2진수 10 (10진수 2)을 2비트(2진수 2자리 수이기에)로 표현 가능하고 제어 가능하단 의미고, 바이트는 비트 8개가 모여서 구성된 것이 1바이트로, 파일이나 데이터 형의 최소단위로 쓰입니다. (2) 프로그래밍과 비트는 무슨 상관일까? 비트가 2진수를 의미한다는 건 알겠는데 도대체 프로그래밍에서 비트가 무슨 의미가 있는 ..
- Total
- Today
- Yesterday
- EzShortcut
- 리버스 엔지니어링
- MS-SQL
- ftp
- 좋은 프로그래머
- TDD
- 바로가기 프로그램
- Rails
- 디자인 패턴
- 게임개발포에버
- RoR
- svn
- SDL
- 루비 온 레일즈
- 루비
- ruby
- c언어
- EasyExec
- Ruby on Rails
- 조엘 온 소프트웨어
- SQLite Spy
- TraceRoute
- perfmon
- 게임데브포에버
- 멀티스레드
- 임백준
- NDC2013
- 엘키
- 디버깅
- CppSQLite
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |