프로그래밍
[C 언어 기초] 6. C 언어 표준
[C 언어 기초] 6. C 언어 표준
2016.12.24C 언어 표준가장 이상적인 것은 우리가 C 프로그램을 작성했을 때, 그 프로그램이 특정 하드웨어를 사용하는 프로그램이 아닌 이상 모든 C 컴파일러에서 동작하는 것입니다. 이것을 실현하기 위해서는 서로 다른 여러 C 컴파일러들이 같은 하나의 규칙을 사용해야 합니다.처음 C 언어에 대한 마땅한 표준이 없던 시절, Brain Kernighan과 Dennis Ritchie가 저술한 "The C Programming Language"의 초판이 C 언어의 표준으로 자연스레 받아들여졌습니다. 그 표준을 K&R C 또는 Classic C라고 부릅니다. 그 책의 부록으로 실려 있는 "C Reference Manual"이 C 컴파일러들에 대해 가이드 역할을 했지만, 이 부록에는 C 언어만 정의하고 C 라이브러리에 대해서는..
==과 =의 오타를 피하는 방법
==과 =의 오타를 피하는 방법
2016.12.23==과 =의 오타를 피하는 방법다음과 같은 소스코드가 있다고 해봅시다.if (num == 10) printf("num은 10입니다. \n");cs만약, 이 코드를 잘못입력해서 if (num = 10)과 같이 입력을 했을 때 문법적으로는 틀린 것이 없으므로 문법 오류가 발생하지 않아서 발견하기가 상당히 어려운 언어가 됩니다.하지만, if (10 == num)으로 순서만 바꾸면 문법적으로는 아무런 이상이 없으며, ==를 잘 못 입력해서 =으로 입력했을 시 if (10 = num)이 되어서 문법 오류가 발생하므로 논리에러를 잡아내는 데 유용합니다.
[C 언어 기초] 5. 고급 레벨 언어와 컴파일러
[C 언어 기초] 5. 고급 레벨 언어와 컴파일러
2016.12.23고급 레벨 언어와 컴파일러C와 같은 고수준의 언어는 여러 가지 방법으로 프로그램을 단순화시켰습니다. 1. 명령을 수치 코드로 나타낼 필요가 없습니다. 2. 사용하는 명령들이 사람들이 사용하는 언어에 더 가깝습니다.CPU에 명령을 내릴 때 위와 같은 절차를 신경 쓸 필요 없이 추상적인 수준에서 원하는 것을 표현할 수 있습니다. 예를 들면, 두 수를 더하는 것을 다음과 같이 표현할 수 있습니다.total = num1 + num2;cs이와 같은 코드는 어떤 일을 하는지 쉽게 예측할 수 있습니다. 하지만, 수치 코드로 적힌 기계어 코드는 무슨 일을 하는 코드인지 이해하기가 쉽지 않습니다.하지만, 컴퓨터는 위와 같은 명령을 이해할 수 없습니다. 이것을 해결하기 위해 사용되는 것이 컴파일러(compiler)인데, ..
임시변수 없이 swap 구현하기
임시변수 없이 swap 구현하기
2016.12.22임시변수 없이 swap 구현하기먼저 이 방법을 알려주는 것은, 이 것이 위험하기 때문에 지양해야 한다는 것을 알리기 위함입니다.먼저, 그 방법을 소개해보면 #define SWAP(x, y) {(x)^=(y)^=(x)^=(y);} 이와 같은 매크로가 정의되어 있다고 해봅시다.int main() { int x = 10; int y = 20; printf("X = %d, Y = %d", x, y); x ^= y ^= x ^= y; //SWAP(x, y); printf("X = %d, Y = %d", x, y); return 0;}Colored by Color Scriptercs위의 코드와 같이 매크로가 풀리게 될 텐데, 이것을 하나씩 뜯어보면 제일 위의 것부터 x ^= y; -> x = x ^ y; 그러면 x..
[C 언어 기초] 4. 컴퓨터의 동작 방법
[C 언어 기초] 4. 컴퓨터의 동작 방법
2016.12.22컴퓨터의 동작 방법C 언어로 프로그램을 작성하는 방법을 배우기 전에, 컴퓨터가 어떻게 동작하는지 조금 알아두는 것이 좋습니다. 이 지식은 C 프로그램을 작성하는 것뿐만 아니라, 작성한 프로그램을 실행시킬 때 어떤 일이 일어나는지까지 이해하는 데 도움을 줍니다.컴퓨터는 여러 가지 다양한 요소로 구성되어 있습니다. ▶ CPU는 컴퓨터가 하는 일의 대부분을 처리합니다. ▶ RAM은 프로그램과 파일들을 담는 저장공간의 역할을 합니다. ▶ 하드디스크 장치는 컴퓨터 전원이 꺼져 있을 때도 프로그램과 파일들을 기억합니다. ▶ 키보드, 마우스 등과 같은 주변 장치는 컴퓨터와 사용자가 의사소통하는 장치입니다.프로그램을 제어하는 CPU CPU가 하는 일은 생각보다 단순합니다. 메모리에서 명령을 하나 가져와서 실행한 뒤, ..
do { ... } while(0) 을 사용하는 이유
do { ... } while(0) 을 사용하는 이유
2016.12.21do { ... } while(0) 을 사용하는 이유원문 : https://kernelnewbies.org/FAQ/DoWhile0리눅스 커널 등의 소스 코드를 보게 되면, "do { ... } while(0)"과 같은 것을 많이 씁니다. 당연히 중괄호 안의 내용이 한 번만 실행되고 끝나는 프로그램인데, 왜 이렇게 만들었을까요?다음과 같은 이유가 있습니다. ▶ Miller : 빈 구문(empty statement)는 컴파일러가 경고를 냅니다. ▶ Miller : 지역 변수를 선언할 수 있는 구역을 만들어줍니다. ▶ Collins : 조건문을 포함한 코드에서 복잡한 형태의 매크로를 사용할 수 있도록 해줍니다.#define FOO(x) \ printf("arg is %s\n", x); \ do_somethin..
[C 언어 기초] 3. C 언어의 미래
[C 언어 기초] 3. C 언어의 미래
2016.12.21C 언어의 미래1980년대 초에 C 언어는 이미 Unix를 사용하는 컴퓨터 세계에서 지배적인 언어가 되었습니다. 그때부터 개인용 컴퓨터와 메인프레임으로 서서히 퍼져 나가기 시작했습니다. 많은 소프트웨어 개발 회사가 C 언어를 사용해서 워드 프로세서, 스프레드시트, 컴파일러, 그 밖의 소프트웨어 제품들을 개발하고 있었으며, 이는 C 언어를 사용하면 간결하고 효율적인 프로그램을 만들 수 있다는 것을 뜻합니다. 더 중요한 것은, C로 만든 프로그램은 수정하기가 쉬울 뿐만 아니라 새로운 모델의 컴퓨터에 적용하기도 쉽습니다.소프트웨어 회사와 C 언어의 고수들에게 좋은 언어라면 다른 사용자들에게 역시 좋을 것입니다. 점점 더 많은 컴퓨터 사용자들이 C의 장점을 활용하기 위해 C 언어로 전환하였습니다. 그렇다고 해서..
[C Project] 카카오톡 광고 제거 프로그램 제작
[C Project] 카카오톡 광고 제거 프로그램 제작
2016.12.20[WinAPI] 카카오톡 광고 제거 프로그램 제작WinAPI를 이용해서 카카오톡의 광고를 제거(숨김)하는 프로그램입니다.카카오톡 광고 제거 프로그램 개발기 카카오톡의 PC 버전은 상당히 편리합니다만, 하단의 광고가 거슬릴 수 있습니다 회사의 수익모델(광고)을 건드리지 않고, 외부 어플리케이션을 제어하는 방법이 궁금한 사람들에게 도움이 되고자 개발 과정을 공개합니다.카카오톡의 광고를 없애는 방법1. 외부에서 제어를 해서, 광고를 제거 혹은 숨깁니다. 2. 설치된 어플리케이션의 리소스를 해킹해서 광고를 완전 제거해버립니다.두 번째 방법의 경우, 카카오톡 프로그램 무단 변경으로 연락이 올 수 있기에 첫 번째 방법을 택했습니다.카카오톡 클래스의 구조 카카오톡의 클래스 구조는 위와 같습니다. 카카오톡의 지식 윈도..
[C 언어 기초] 2. C 언어가 인기 있는 이유
[C 언어 기초] 2. C 언어가 인기 있는 이유
2016.12.20C 언어가 인기 있는 이유C 언어는 현재 가장 중요하고 인기 있는 프로그래밍 언어 중 하나가 되었습니다. 많은 C 사용자들이 C++ 언어로 넘어가기도 했지만, C는 그 자체로도 중요하며, C++ 언어를 배우는 발판이 됩니다. 다음은 C 언어의 장점 중 몇 가지를 나열해 봤습니다. 1. 제어구조가 강력합니다. 2. 실행 속도가 빠릅니다. 3. 코드가 간결합니다. 4. 이식성이 좋습니다.설계상의 특징C 언어는 하향식 설계와 구조화 프로그래밍, 모듈화 설계를 쉽게 적용할 수 있는 환경을 제공함으로써 신뢰할 수 있고 이해하기 쉬운 프로그램을 만들 수 있습니다. 효율성C 언어는 컴퓨터를 효율적으로 사용할 수 있도록 설계된 프로그래밍 언어입니다. 그래서 C로 만든 프로그램 역시 작고 실행 속도 또한 빠릅니다. C를..
[C 언어 기초] 1. C 언어의 역사
[C 언어 기초] 1. C 언어의 역사
2016.12.19C 언어의 역사C언어는 취미로 프로그래밍하는 사람과 직업으로 하는 사람 모두에게 인기 있는 강력한 프로그래밍 언어입니다. 1972년 Thompson의 B 언어를 기반으로 Unix 운영체제를 위해서 만들어진 C언어는 거의 30년이 넘게 지난 지금까지도 많은 사람에게 사랑받고 있는 언어 중 하나입니다. 객체지향이 일반화되고 C++, JAVA, Python과 같은 C와 비교해 더 편한 언어들이 나왔음에도 불구하고, 상업적으로 또는 학습용으로 자리를 지키고 있습니다. C언어가 인기를 끌게 되자, 산업현장에서는 쉽게 응용을 할 수 있도록 표준화가 필요해졌고, 그리하여서 1983년 ANSI(American National Standards Institute)에서 C에 대한 표준을 정의하게 됩니다. 이후 C를 위한 ..
[C 언어 기초] 이 강좌의 접근 방법과 목표
[C 언어 기초] 이 강좌의 접근 방법과 목표
2016.12.18이 강좌의 접근 방법과 목표이 강좌의 목표는 혼자서도 C 언어를 공부할 수 있도록 친절하고 유용한 자습서를 제공하는 것입니다.이 목표를 달성하기 위해 다음과 같은 전략들을 수용했습니다.1. 프로그래밍의 개념을 C 언어와 함께 천천히 설명합니다. 2. 간단하고 많은 예제를 통해서 이해를 돕습니다. 3. 텍스트만 가지고 이해하기 어려운 개념은 그림을 이용해서 좀 더 명확하게 전달합니다.이 강좌가 설명하는 각 주제에 대해서 능동적인 태도를 보여야지만 최대의 효과를 낼 수 있습니다.단순히 예제를 눈으로 읽는 것에 그치지 말고, 시스템에서 직접 타이핑하고 실행해보세요.C는 이식성이 있는 언어지만, 독자의 시스템에서 강좌의 내용과 다르게 작동하는 부분이 있을 수도 있습니다. 그럴 때는 프로그램 일부를 수정하면서 어..