목록컴퓨터 관련/C언어 (7)
Linux Programmer
예전에 C언어를 잘못 배우는 사람들이 많아서 쓰게 된 "C언어 공부법과 추천"글의 후속으로, 구체적으로 어떤 내용들이 잘못 알려졌는지를 다뤄 볼 것이다. 이 내용들은 좋지 않은 C언어 서적들이나 인터넷에서 돌아다니는 강좌들에 반복적으로 나타나는 오류이다. 사실 알고보면 인터넷에 잘못된 오류를 쓴 사람들은 원래 잘못된 책으로 공부한 뒤에, 그 지식들을 정리한 뒤에 글을 쓰기 때문에 책으로부터 퍼지는 것과 다를바가 없다. 최근에는 많이 줄었지만 fflush(stdin) 같은 UB(undefined behavior)는 너무 흔하게 나타나서 C언어를 배운 사람중에 거의 대다수가 fflush(stdin)을 쓸 정도였다. 심지어 많은 C언어 책에도 fflush(stdin)을 마구잡이로 썼었다. ㅠㅠ 그래서 본인은 ..
C언어 공부법과 책추천 마지막 수정일 : 2020-11-16 처음 쓴 날짜 : 2015-01-15 이 글은 C언어를 공부할 때 헤메지 않고 국제 표준인 정종(正種) C언어를 배우는데 도움을 주고자 쓰여졌다. 그러기 위해 알아야 하는 용어나 기반지식들을 살펴보고, 추천 도서인 KNK, K&R에 대해 소개하겠다. 참고로 여기에서 제시하는 방향이나 책이 올바르고 유일한 진리의 길은 아니다. 이 길은 개인적이고 주관적인 견해가 포함되어있으니 감안하고 보길 바란다 2015년을 기준으로 할때, 현대 컴퓨팅 환경에서 C언어의 위치는 거의 바닥에 존재하는 기초 언어이다. 따라서 C언어 뒤에 등장한 프로그래밍 언어들은 C언어의 문법체계를 따라했을 정도로 큰 족적을 남기기도 했다. 또한 운영체제(Operating syst..
실무에서 쓰이지 않지만 시험에서만 출제되는 C언어 시험 문제의 세계를 고발(?)하고자 한다. 고발이라고 하면 좀 자극적이긴 하지만 사실 특별한 내용은 아니다. 대부분 C언어 하시는 분들은 예전부터 생각해온 것일지도... 사실 요새 몇몇 기관의 시험문제를 출제, 감수 하면서 현실과 동떨어진 시험의 세계를 느낀 후 적는 글이다. 어떤 시험을 출제하느냐고 묻지는 말았으면 한다. 보안서약상 구체적인 기관이나 정보를 이야기할 수는 없다. 시험 문제 출제를 할 때면 출제를 요구하는 기관에서 과목, 출제 목표, 세부사항 등을 일일히 정해준다. 따라서 누가 문제를 내든지 비슷한 형태가 나올 수 밖에 없다. 예를 들면 다음과 같은 요구 사항이 있다고 치자. 과목 대분류 소분류 세부 사항/출제 목표 C언어 예약어 연산자 ..
벌써 몇 년이 지난 이야기다. 교육을 받던 분이 굳이 C언어를 배워야 할 필요가 있냐고 물어보셨다. 그에 대한 개인적인 생각을 적어보도록 하겠다.(이 글은 컴관련 전공자에 한하여 유효한 이야기이다. 비전공자라면 굳이 꼭 C언어를 배울 필요는 없다. 물론 개인적인 공부 방향이 컴관련 하부구조이거나 혹은 나중에 컴관련 대학원을 진학하려면 C언어 공부는 필수다.) 1. 체계화된 프로그래밍 순서를 익힐 수 있다. 모든 프로그래밍은 기본적으로 연산에 필요한 데이터를 메모리에 적재(load)하고 일련의 계산 결과를 저장(store)하게 된다. 이 후에 결과 데이터를 특정 위치로 전송하거나 복제하기도 한다. 이런 기본적인 계산 단위가 논리적으로 분기되고 복합적으로 연결된 것이 바로 프로그래밍이 되겠다. 그러나 가장 ..
* 주의: 여기서 설명하는 getline은 C++의 getline 메소드와는 다른 것입니다. 혼동하지 마시기 바랍니다. fscanf는 기본적인 입력 받는 함수로 모든 C언어 기초 책에서 소개되고 있지만 개행 문자(new line)나 공백 처리에 곤란한 부분이 있어서 실무환경에서는 fgets + sscanf 로 대체하여 사용하는 편이다. 하지만 scanf는 여전히 형식화된(formatted) 데이터, 즉 숫자나 문자, 공백으로 띄워진 문자열들을 처리할 때는 편리하다는 장점도 있다. 그렇다고해서 scanf의 여러가지 문제점이 완전 해결되는 것은 아니지만!! * scanf의 문제점 scanf("%c", ...) 로 읽는 경우에는 개행 문자를 사용자 입력으로 처리하기 때문에 문자 입력 후 엔터를 치면 다음번 s..
이 글은 2008년도에 개정된 POSIX.1-2008 표준에 추가된 함수, dprintf에 대해 소개하는 글입니다. TOC 1. 형식화된 입출력에서 printf 란? 2. printf와 고수준 파일 처리 3. 새로운 형식화된 출력 dprintf 4. 결론 과거 타자기부터 컴퓨터까지 수 많은 발전 중에 가장 중요한 것중에 하나는 데이터를 정확하고 멋드러지게 출력하는 것이었다. 그러다보니 프로그래밍에서 빠질 없는 것이 바로 형식화된 입출력(Formatted Input/Output)이다. (형식화된 입출력이란 데이터의 형태를 변환하여 읽거나 출력하는 것으로 로케일 변환, 자릿수 맞춤, 들여쓰기(tab) 등등의 기능을 말한다.) 1. 형식화된 입출력에서 printf 란? 형식화된 입출력에서 printf는 출력 ..
* 이 글은 C언어 시스템 프로그램에서 주로 사용되는 reentrant(재진입성) 함수와 멀티쓰레드 안전(Multi-threads-safety)의 차이와 기능에 대해서 알아보는 글입니다. (참고: "멀티쓰레드 안전"은 매뉴얼 표기시 MT-safe, MT-safety, Thread-safe라고 표기합니다.) 우선 책에는 애매모호하게 짧게 적어놔서 문의 메일을 여러 차례 받았습니다. 매번 같은 내용을 설명하는 것도 힘들고, 자세히 설명드리지도 못해 죄송한 마음에 미리 적어두고 해당 링크만 참조시켜드릴 요령으로 작성하게 되었습니다. [책의 원문] * 원자성과 쓰레드 - 안전, 재진입성에 대해서 원자성(atomicity)이 보장되는 코드(or 함수)는 일단 해당 코드 부분이 시작하면, 종료되기 전에는 다른 코드..