Legacy/C&C++
-
프로그래밍을 위하여 - 0x03 "경고와 오류"Legacy/C&C++ 2015. 6. 10. 08:47
경고(Warning)와 오류(Error)우리가 프로그래밍을 하면서 수많은 경고와 오류를 접하게 된다. 그런데 "경고는 무엇이고 오류는 무엇인가? 둘은 같은 것이 아니었나?"라고 생각하는 사람도 있을 것이다. 실제로 조금 프로그래밍을 배운 사람들도 이 두 단어를 혼동해서 사용하고 있는 경우를 종종 발견할 수 있다. 하지만 '경고'와 '오류'는 엄연히 다른 단어이다. (글자 생김새부터 다르지 않은가? :-) ) 우선 경고에 대해서 알아보자.경고(Warning)란 "컴파일은 가능하지만 문제가 발생할 수 있다." 라는 의미이다.대표적인 예로 Visual Studio 2010에서의 scanf 함수를 살펴보자. 우리는 scanf를 사용하여 코드를 작성하여 F5를 눌러 컴파일을 하면 다음과 같은 메시지를 확인할 수 ..
-
프로그래밍을 위하여 - 0x02 "소스코드가 프로그램이 되는 과정"Legacy/C&C++ 2015. 6. 10. 08:46
소스코드가 프로그램이 되는 과정 우리가 비쥬얼 스튜디오 혹은 리눅스에서 소스를 작성한 후 컴파일을 시키면 위와 같은 과정을 거쳐 '실행프로그램'이 된다.우선 선행처리기 다른 말로 전처리기(Preprocessor)가 하는 작업은 소스에서 #이 붙어있는 내용들을 바꿔주는 작업을 한다.예를 들어 #define 혹은 #ifdef, #ifndef 같은 조건부 컴파일을 위한 구문들을 처리한다. 이러한 전처리 과정을 거치면 순수한 C코드인 Pure C가 된다.위 그림에 나와있는 선행처리기 이후에 있는 소스프로그램이 그 후 컴파일러를 거치는데 컴파일러는 소스 프로그램이 문법에 맞는지 확인하는 과정을 거친다.이때 확인을 위해 BNF(Backus–Naur form)이라는 표기법을 이용해 트리를 구성한 후 적법한 문법인지 ..
-
프로그래밍을 위하여 - 0x01 "C표준과 POSIX C"Legacy/C&C++ 2015. 6. 10. 08:45
C 표준 (C Standard) 이 글을 보고 있는 사람들은 다들 C를 배웠거나 배우고 있는 사람들일 것이다. 그러면 C는 알겠는데 C의 표준은 무엇일까? 먼저 일반적으로 통용되는 '표준'이라는 의미에 대해 알아보자. 위키백과를 검색해보면 표준이라는 말 대신 '표준화'라는 말이 등장한다. 표준화(標準化)는 여러 가지 제품들의 종류와 규격을 표준에 따라 제한하고 통일하는 것을 말한다. 이와 비슷한 말로 정규화가 있다. 표준으로 만든다는 의미지만 여러 가지 제품들의 종류와 규격을 표준에 따라 제한하고 통일하는 것을 말한다고 한다. 종류와 규격을 통일하는 것을 의미하는 것 같다. 표준화를 하는 이유는 불편함을 막기 위해서이다. 예를들어 돈을 생각해보자. 우리나라에서 표준으로 통용되고 있는 화폐가 무엇인가? '..
-
프로그래밍을 위하여 - 0x00 "사전 준비"Legacy/C&C++ 2015. 6. 10. 08:44
프로그래밍을 위한 사전 준비 Java 같은 객체 지향적(object-oriented) 언어들도 마찬가지겠지만, C로 프로그램을 만들 때에는 무작정 코드를 작성하기 전에 먼저 프로그램을 설계하는 과정이 필요하다. 언어를 새로 배우는 과정에서 접할 수 있는 예제들처럼 쉽고 간단한 문제들은 설계가 별로 필요가 없지만, 조금만 규모가 커지거나 알고리즘 대회 문제 같은 복잡한 문제를 프로그래밍하려면 대개 설계가 꼭 필요하다. 설계가 상세할 수록 프로그램이 주어진 문제를 빠르고, 정확하게 풀 '가능성'도 높아진다. 또한 설계를 잘 해두면 비교적 버그가 적고 유지보수도 쉬운 프로그램이 만들어진다. 프로그램을 설계할 때 생각해 봐야할 첫 번째는 '내가 풀고자 하는 문제가 무엇인가?'이다. 만약 다음과 같은 경우를 생각..
-
[컴파일] 네임 맹글링 (Name Mangling, =Name Decoration)Legacy/C&C++ 2015. 5. 4. 10:30
[출처] [컴파일] 네임 맹글링 (Name Mangling, =Name Decoration) - http://blog.naver.com/PostView.nhn?blogId=no1rogue&logNo=30095521394 * 네임 맹글링(Name Mangling) ; 프로그램에서 함수나 변수를 선언했을 때, 선언시 사용했던 이름을 컴파일러가 컴파일 단계에서 일정한 규칙을 가지고 변형하는 것으로, 네임 데코레이션(Name Decoration)이라고도 한다. 네임 맹글링은 주로 C++에서 종종 듣게 되는데, 이 작업은 링커가 다른 범위(Scope)에 있는 '같은 이름의 함수 및 변수'들에 대해 구별을 가능하게 해준다. 다른 범위라는 것의 예를 들면 다른 파일이나 다른 네임 스페이스가 다른 경우를 들 수 있으며..
-
문자열 변수와 상수Legacy/C&C++ 2015. 1. 19. 20:22
■ 문자열을 표현하는 방법은 크게 두가지가 있다. char str1[5] = "abcd"; //문자열 변수 char *str2 = "ABCD"; //문자열 상수 (1) 문자열 변수 : 요소가 char형인 str1이라는 이름의 배열을 선언하고, 대입 연산자 오른쪽에 선언된 문자열을 저장하고 있다. 따라서 str1이 저장하고 있는 문자열은 변수가 된다. [ a | b | c | d | \0 ] str1[0] str1[1] str1[2] str1[3] str1[4] (2) 문자열 상수 : 대입 연산자의 왼쪽에 char형 포인터를 선언하고, 오른쪽에는 "ABCD"라는 문자열을 선언하고 있다. 이는 포인터 str2를 이용해서 문자열 상수"ABCD"를 가리키겠다는 의미가 된다. 따라서 str2는 문자열의 첫 문자 ..
-
C언어 공부법과 책추천Legacy/C&C++ 2015. 1. 12. 23:10
출처 - http://sunyzero.tistory.com/225 8월 13일 원글 수정되었음. 이 글은 C언어를 공부할 때 헤메지 않고 국제 표준인 정종(正種) C언어를 배우는데 도움을 주고자 쓰여졌다.그러기 위해 알아야 하는 용어나 기반지식들을 살펴보고, 추천 도서인 KNK, K&R에 대해 소개하겠다. 2015년을 기점으로 현대 컴퓨팅 환경에서 C언어의 위치는 거의 바닥에 존재하는 기초 언어이다.C언어 뒤에 등장한 프로그래밍 언어들은 C언어 문법체계를 따라했을 정도로 큰 족적을 남기기도 했다. 또한 운영체제(Operating system)의 설계 및 구현에 사용되었기에 시스템 하부 구조를 배울 때 빠짐없이 등장하는 단골손님이기도 하다. OS, Network, C language 이런 연유로 C언어는 ..