C를 배우는 실용적인 방법? [닫은]


10

나는 C를 파고 싶고 일반적으로 새로운 언어를 배우고 싶을 때 실용적인 목적을 가진 단순하고 달성 가능한 프로젝트 목표를 생각합니다 (api 사용, 작업 자동화 등).

C에서 주로 사용하는 것이 현재 임베디드 시스템과 운영 체제와 같은 더 복잡한 소프트웨어 프로젝트에 있다는 사실을 지적하기 때문에 C에 대한 어려움을 겪고 있습니다.

이것은 내가 그것을 배울 필요가 없거나 나의 학습 전략에 조금 더 복잡해야한다는 사실을 나에게 알려주 는가?

실용적인 학습 자료에 대한 언급? (자습서 / 그 방법은 목적 / 이점이있는 최종 결과를 생성합니다)


3
왜 C를 배우고 싶은지 말해 주면 더 현명한 답변을 얻을 수 있습니다.
zvrba

2
zvrba에 동의합니다. C는 저수준의 빠른 작업과 드라이버 코드에 적합합니다. 게임용 코드를 작성하는 경우에도 좋습니다 (비표준 코드 작성에 대해 불만을 제기하는 C ++ 코더와 함께 작업하고있을 것임). 그러나 Assembly와 C는 라틴어와 비슷하지만 (첫 번째 언어는 아님), 처음에는 그렇지 않았지만 대부분 아이디어와 구성을 사용하여 자신의 언어를 만들었습니다. 따라서 C MIGHT를 공부 하면 고급 언어를 더 잘 이해할 수 있습니다
Jamie Taylor

Zed Shaw 's Learn C The Hard Way 를 확인하셨습니까 ? 사람이 얻을 수있는만큼 실용적이며 무료입니다.
Wyatt Barnett

파이썬 어려운 사람은 이제 C의 알파 버전을 포함한 다른 언어로 된 책을 가지고 있습니다. C는 asm과 큰 차이가 있으며, asm과 비교하는 것이 거짓이므로 싫어합니다. 상대적으로 다른 언어가하지 않는 것을 할 수 있는지 확인하십시오. C로 작성할 수있는 응용 프로그램을 만들고자하는 것이 중요하지 않습니다. 응용 프로그램을 언어로 타겟팅 할 이유가 없습니다.
old_timer

답변:


27

Kernighan과 Ritchie의 The C Programming Language (2nd Edition) 사본을 선택하는 것이 좋습니다 . 각 장의 끝에는 C 언어에 대한 훌륭한 소개와 함께 연습이 많이 있습니다. 그것은 당신을 언어의 주인으로 만들지 않을 것입니다, 그러나 당신은 아마도 책을 읽고 기여할 수 있는 C로 작성된 오픈 소스 프로젝트를 찾기 위해 책 끝과 연습을 충분히 이해해야합니다. 에.

C 코드가 포함 된 실제 실제 프로젝트를 보려면 점점 어려워지고 있습니다. 많은 프로젝트가 "상위 레벨"언어를 사용하지만 C는 여전히 살아 있고 발 차기 시작합니다. C를 배우고 싶다면 학습을 위해 바퀴를 다시 발명하는 것을 두려워하지 마십시오. 시계에 솔루션을 재창조하는 것은 좋지 않지만 학업으로 사용하는 것이 좋습니다.


1
comp.lang.c의 FAQ를 추가하십시오. c-faq.com
Mike Sherrill 'Cat

3
+1은 배우기 위해 솔루션을 재발 명하지 않아도됩니다.
CVn

4
K & R은 일반적으로 좋은 프로그래밍 스타일을 배우는 데 끔찍한 일이며 특히 안전하고 안전한 C 프로그래밍 방법을 가르치는 데 끔찍합니다. 그 안에있는 모든 코드 스 니펫은 기껏해야 모호합니다. 대부분은 위험한 습관을 가르쳐줍니다. 그것은 오래된 책이므로 향수를 넘어서는 아무것도 추천하지 않습니다. 초보자 프로그래머에게는 특히 적합하지 않습니다.

2
@ 토마스 네 번째 판. 거의 모든 코드 스 니펫을 인용 할 수 있으며 2-3 건의 위험한 / 가난한 사례를 지적 할 수 있습니다. 지금 책을 열고 임의의 예를 선택하겠습니다. 여기에 우리가 간다, p119 : 내부 조건 할당, 원시 원시 데이터 유형 사용, 암시 적 int 사용 (서명되지 않음), malloc 결과를 타입 캐스팅 (매우 나쁨!) ), {}이없는 경우 적절한 #include없이 NULL을 사용하는 다중 반환 (일명 스파게티).

2
KnR C의 경우 +1. 내가 읽은 특정 언어로 프로그래밍하는 가장 좋은 (가장 간결한) 소개입니다. 다른 사람들이 지적했듯이, 그것은 장소에서 조금 모호 할 수 있습니다. 내가 줄 조언은 이것입니다 : 주변 블러를 읽을 것을 요구하는 프로그래밍 매뉴얼이 있다면 이것이 바로 그것입니다. 다른 사람들은 일반적으로 코드 블록에서 알아낼 수 있지만이 책에서는 적어도 한 번은 엄폐를 읽도록 요구합니다.
Jamie Taylor

1

메모리 할당을 실제로 이해해야합니다. 이전에 다른 언어를 사용했던 것처럼 들리지만 다른 언어가 메모리 관리에 대한 세부적인 내용을 숨길 수 있습니다. C에서 메모리 관리는 항상 명시 적입니다. 이것에는 몇 가지 장점이 있지만, 올바르게 이해하려면 조심해야합니다. 그렇지 않으면 모든 지옥이 풀릴 것입니다.

사용하는 플랫폼에 사용 가능한 메모리 디버깅 기능을 사용하십시오. Linux에는 Electric Fence가 있고 Mac OS X에는 Guard Malloc이 있습니다. 또한 여러 운영 체제를 지원하는 Valgrind가 있습니다.

해제해야 할 메모리를 확보하지 못하면 메모리 누수가 발생합니다. 계속하면 메모리가 부족합니다. 백업 저장소 (대부분의 사람들이 가상 메모리라고 함)를 사용하더라도 시스템 페이지가 과도하게 또는 스왑 공간이 부족해질 수 있습니다.

이미 해제 된 메모리를 해제하면 힙과 충돌이 발생하지만 즉시 실행되지는 않습니다. 버퍼를 오버런하면 힙이 손상됩니다. 메모리 디버깅 도구는이 모든 것에 도움이됩니다.

단위 테스트도 도움이됩니다.


0

나는 오늘날 대부분의 사람들이 오늘날의 언어가 당면한 과제에 의해 결정된다는 데 동의합니다. 이와 관련하여 선택의 폭이 제한되었던 시간이있었습니다. 오늘날 C는 주로 코드 최적화가 필요한 임베디드 / 시스템 프로그래밍 영역에서 사용됩니다. 추상화를 사용하기 시작하면 기본 요소가 매우 견고해야하기 때문에 최대 값을 얻으려면 정확한 코드를 작성해야합니다. 리눅스와 같은 오픈 소스 GNU 프로젝트 나 C 개발자를 필요로하는 무언가를 둘러 보려고한다. C에서 처음부터 무언가를 작성하는 대신 해당 프로젝트에 손을 대십시오. 이것은 아마도 코드를 작성하고 언어를 배우는 더 좋은 방법 일 것입니다.


실제로, 비록 작은 프로젝트라도 처음부터 언어를 배우기 시작하는 좋은 방법은 기존의 프로젝트로 먼저 뛰어들 것입니다. 당신은에 들어갈 가능성이 방법은 머리 위로, 또한 당신이 착수 모든 경우에도, 간단하게 코드를 탐색하는 노력의 추가 부담을해야합니다 이해 하는 방법을 코드 작품. 특히 운영 체제 커널은 매우 복잡한 소프트웨어입니다.
CVn

네,하지만 질문자가 실제로 K & R 책이나 그와 비슷한 것을 겪었다 고 가정합니다. 파이썬 채널에서 물었을 때이 방법을 권장했습니다. C와 다를까요?
Nishant

엄밀히 말하면 나는 그것이 그렇게 다를지 모르겠지만, C에서는 파이썬과 같은 고급 언어보다 딱딱한 세부 사항에 더 많은주의를 기울여야합니다. 메모리 관리, 가지만 언급하십시오 . 언어를 처음 시작할 때 확립 된 잠재적으로 큰 프로젝트에 들어가는 것이 최선의 방법이 아닐 수도 있습니다.
CVn

0

명령 행에서 작동 할 수있는 작업을 수행하려고합니다. C에서 GUI 프로그래밍은 좋은 GUI 프레임 워크를 가지고 있어도 엉덩이에 큰 고통입니다 .

실용적인 C 학습 경험에 대한 나의 일반적인 제안은 연락처 목록이나 다른 간단한 데이터 관리 앱이었습니다. 여기에는 대부분의 중요한 비트 (I / O, 메모리 관리, 텍스트 처리 등)가 포함되며이를 달성하기 위해 표준 C 라이브러리 외부에서는 아무것도 사용할 필요가 없습니다. C는 그래픽, 네트워킹, 사운드, 또는 많은 다른 사람에 대한 내장 지원이없는 일을 사물의 그 종류에 의존하는 것을 방지하기 위해 최선의 프로그래밍 C에 첫 진출을 위해 그렇게.

C 범용 프로그래밍에 사용될 있습니다. 당신은 기대를 약간 낮추어야합니다 (1983 년이고 VAX 11/750에 부착 된 VT52 앞에 앉아 있고 당신은 올바른 사고 방식에있을 것입니다).

C에는 블레이드 가드가 없으므로 어리석은 일을 방해하지 않습니다. 언어 정의는 장소에서 약간 느슨하며, 불법적 이지 않지만 잘 정의되지 않은 일부 작업이 있습니다.


1-언어 표준의 최신 (2011) 개정에 내장 스레딩 지원이 추가되었습니다.


0

Project Euler를 추천 합니다. C ++을 향상시키는 데 사용했으며 훌륭합니다. 각 문제는 완료하는 데 1 시간 미만이 소요될 수있는 작은 작업이기 때문에 좋습니다 (최소한 첫 번째 문제).

속도 최적화를위한 프로파일 러와 책이 필요합니다. 1 분 규칙을 준수해야합니다. 1 분 이내에 답변을 받아야합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.