programing

C를 배우는 흥미로운 프로젝트?

sourcejob 2023. 7. 13. 20:50
반응형

C를 배우는 흥미로운 프로젝트?

저는 C에 대한 기본 지식을 가지고 있습니다(그리고 C++에 대해서도 조금 더 알고 있습니다).저는 K&R의 복사본을 얻었고, 저는 제가 그 언어를 더 깊이 파고드는 것을 돕기 위해 그것을 사용하고 싶습니다.C의 대부분의 기능과 표준 라이브러리를 사용하는 것과 관련된 좋은 아이디어는 무엇입니까?또한 C89와 C99의 중요한 차이점은 무엇입니까?

편집: 언급하는 것을 잊었습니다. 이것은 대부분 초보자가 할 수 있어야 합니다.저는 프로그래밍 튜토리얼을 요구하는 것이 아니라 중간 규모의 것을 요구하는 것입니다.C의 주요 목적 중 하나가 OS라는 것은 이해하지만, 너무 복잡하지 않을까요?

또한, 질문을 읽고 대답하는 것은 항상 좋은 생각이지만, 저는 실제 연습을 하고 싶고, 무언가를 할 수 있는 프로그램을 만들고 싶습니다.

프로그래밍 언어를 구현합니다.이것은 심하게 어려울 필요는 없습니다 - 저는 이름을 지어선 안 되는 언어를 했습니다 - 하지만 그것은 여러분이 C의 중요한 부분들을 많이 배우도록 강요할 것입니다.직접 렉서를 작성하거나 파서를 작성하지 않으려면 lex/flex 및 yacc/bison을 사용할 수 있지만, 이를 계획하고 있다면 더 작은 프로젝트부터 시작하는 것이 좋습니다.

당신이 가지고 있는 프로그램을 고급 언어로 가져와서 다시 쓰십시오.자주 사용하는 Perl/Python/Ruby/Bash 스크립트가 있는데 실행 중 지연 시간이 발견되면 성능에 중점을 두고 C로 다시 작성합니다.

하지만 C를 배우기 위한 프로그램을 작성하고 있다면 바퀴를 재창조하는 것이 더 낫다고 생각합니다.C의 프로그래밍은 휠을 만들고 조정하는 것입니다. 만약 여러분이 휠을 추상화하는 라이브러리를 사용하여 C를 배운다면, 여러분은 정말로 C를 배우지 못할 것입니다.더 빠를 수도 있습니다. 그리고 C에서 실제 프로젝트를 진행할 때는 바퀴를 재창조하지 마십시오. 하지만 만약 여러분이 바퀴가 어떻게 작동하는지 배우기 위해 이렇게 한다면, 반드시 바퀴가 어떻게 작동하는지를 배우십시오.

StackOverflow에서 C 질문을 읽고 대답하는 것은 언어의 세부 사항을 배우는 좋은 방법입니다.

저는 http://projecteuler.net/ 을 통해 일하는 것을 추천합니다.물론 때로는 C에서 이러한 것들 중 일부를 비효율적으로 수행하는 것이 도움이 되고, 잔인한 힘이 얼마나 오래 걸리는지를 이해하는 데 도움이 됩니다.그리고 나서 좀 더 영리한 방법을 생각해 내고 C의 아름다움을 실제로 보도록 노력하세요!

간단한 문법 언어를 위한 통역사.물론 이를 흥미롭게 만들기 위해 렉서/파서 생성기를 사용해서는 안 됩니다.

체스 게임을 만듭니다.일반 콘솔로도 수행할 수 있기 때문에 매우 사소한 작업일 수 있습니다.논리를 구현하고, 데이터 구조를 사용하고, 포인터 작업 등을 할 수 있습니다.끈기 있게 작업할 수 있도록 점수를 저장합니다.

제가 새로운 언어를 배우고 싶을 때, 저는 항상 유용한 유용성을 생각해내고 그것을 씁니다.저는 사용될 실제 프로그램을 작성하는 것이 단순한 개념 증명 이상의 것을 가르쳐준다는 것을 알게 되었습니다.

예를 들어, 지정된 디렉토리에서 시작하여 모든 파일 목록을 작성하고 해당 파일로 작업을 수행하는 프로그램을 작성할 수 있습니다.좋아요는 지정된 크기보다 큰 모든 파일의 단순 목록을 제공합니다.그런 다음 필터를 추가하여 완료되면 이 필터를 사용하여 디렉토리를 정리할 수 있는 방법을 알아봅니다.tmp가 포함된 파일이나 "백업"이라는 단어를 찾을 수 있습니다.포인터를 포인터에 전달하여 사용자에게 호감을 주는 기능을 하나 이상 사용하는 것을 잊지 마십시오.

예, 스크립트로 사용할 수 있지만 사용자에 맞게 사용자 지정할 수도 있습니다.

얼마나 깊이 들어가고 싶은지에 따라, 아마도 둠?

하드웨어(내장 마이크로프로세서 시스템) 및 운영 체제 커널 코드?

이런 상황에서 구현하는 제가 가장 좋아하는 프로그램은 정규식 매칭 프로그램입니다. 이 프로그램은 상당히 기본적인 구문을 사용하지만 언어의 하위 수준 기능을 많이 사용합니다(그리고 C가 상당히 하위 수준의 언어이기 때문에 대부분입니다).

c로 완성된 http://projecteuler.net/ 은 어떻습니까?그것은 뇌세포를 유발할 것입니다 :)

커널 해킹을 좀 합니다.

sudo apt-get install git-core
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6

나는 unbuntu를 사용하기 때문에 apt-get을 했고, gentoo도 사용한다, 거기에 있는 명령어는# emerge dev-util/git

간단한 데이터베이스 애플리케이션(연락처 목록, 영화, 앨범 등)도 좋은 프로젝트가 될 수 있습니다. 파일 I/O, 대화형 I/O, 메모리 관리, 합리적으로 고기능 데이터 구조 등이 포함됩니다.

언어의 차이 때문에 크게 걱정하지 마세요.그것들이 많지는 않지만, 여전히 있습니다.(저는 2년 동안 c를 쓰고 있지만 여전히 어떤 스타드가 있는지 모릅니다, 만약 제가 지원되지 않는 컴파일러를 얻는다면 코드를 고치는 데 몇 분이 걸립니다.)

발생할 수 있는 가장 짜증나는 일 중 하나는 보통 c++ 사양으로만 간주되는 for(inti;i<2;i++)와 같은 코드 중간에 값을 정의하는 것입니다.그것이 제가 Whit에 직면했던 것입니다.교차 컴파일을 통해 표준 차이를 훨씬 더 좌절시키는 다른 것을 발견할 수 있습니다.

c에서 시작하기 위해 알고리즘과 운영 체제 또는 임베디드 시스템을 배우는 것을 제안합니다(낮은/중간 임베디드 시스템에서 여전히 가장 일반적인 언어).

예를 들어 마이크로칩, 에어멜 또는 프리스케일에서 하드웨어의 안정성을 얻고 내장된 RTOS 지원을 확인합니다.

2006년 ICFP 콘테스트 문제는 매우 재미있었습니다.첫 번째 부분인 가상 시스템 구현은 작은 문제로, C가 여전히 적합한 종류입니다.하지만 표준 라이브러리를 많이 가르쳐 주지는 않을 것입니다.

bigfiles.c 및 man 3fts 사용(파일 계층 간 이동)을 확인(및 개선)할 수 있습니다.

http://codesnippets.joyent.com/posts/show/1888

언급URL : https://stackoverflow.com/questions/1257376/interesting-project-to-learn-c

반응형