Programing

C 프로그램 설계 학습을 위한 리소스

c10106 2022. 5. 20. 21:29
반응형

C 프로그램 설계 학습을 위한 리소스

OO 배경(C#/java)에서 온 나는 순수 C 프로그램을 잘 설계하는 방법을 배울 수 있는 자원을 찾고 있다.

나는 C의 구문에 익숙하고, 작은 프로그램을 쓸 수 있지만, 더 큰 애플리케이션을 위해 취해야 할 접근법과 어떤 기법을 사용해야 할지 확신이 서지 않는다.너희가 추천할 수 있는 거라면 뭐든지.

편집: C에서 프로그래밍을 목적으로 OO를 완전히 포기하게 되어 기쁘다, OO 없이 프로그램을 구성하는 방법을 배우는 것이 나의 관심사, C와 같은 절차적 언어로 프로그램을 디자인하는 좋은 방법에 대해 배우고 싶다.

이 게시물에는 대부분의 고전적인 C/Unix 작품들이 포함된 UNIX 도서 목록이 있다.Windows에서 C 프로그래밍을 하려면, Petzold의 Programming Windows가 아마도 가장 좋은 시작일 것이다.

C 프로그램 설계의 경우 UNIX 프로그래밍 서적 중 몇 권이 스니펫을 알려줄 것이지만 나는 'C 프로그램 아키텍처' 책을 잘 모른다.

Java에 익숙하다면 C 프로그래밍에 대한 몇 가지 팁은 다음과 같다.

  1. 스택활용하십시오.종종 프로시저를 호출할 때 당신은 호출자의 스택 프레임에 변수를 할당하고 당신이 호출할 프로시저에 포인터를 전달하기를 원할 것이다.이는 동적으로 메모리를 할당하는 것보다 훨씬 더 빠르고 오류가 덜 발생할 수 있다.필요한 경우 이 작업을 수행하십시오.

  2. C는 가비지 수집을 하지 않기 때문에 데이터 항목을 동적으로 할당하는 것이 더 안절부절못하며, 그들이 해방될 수 있도록 추적해야 한다.스택에 할당된 변수(1 참조)는 적용 가능한 경우 더 '직관적'이다.게다가, 당신은 그들을 자유롭게 할 필요가 없다 - 이것은 지역 변수에 대한 보너스다.

  3. (2)의 어프로포스는 (1)에 따라 기능이 상태 또는 오류 코드를 반환하고 스택을 사용하여 데이터를 안팎으로 전달하는 아키텍처를 고려한다.

  4. 알고 행동하라.그것들은 구조화된 예외 처리 기능 대신에 일반 오류 처리 메커니즘에 상당히 유용할 수 있다.

  5. C는 예외를 지원하지 않는다.(3)을 참조한다.

  6. 린트는 네 친구야.스플린트는 훨씬 더 친근하다.

  7. 전처리가 하는 일이 무엇인지, 할 수 있다고 해도 그것을 가지고 해서는 안 되는 일이 무엇인지 배워라.

  8. 엔디안 네스, 단어 정렬, 포인터 산술 및 기타 낮은 수준의 건축 아르카나의 내/외부에 대해 알아보십시오.대중의 의견과는 달리 이것들은 로켓 과학이 아니다.만약 여러분이 예민하다고 느낀다면, 조립 언어를 살짝 만지작거려보고 그것에 대한 실무 지식을 얻으세요.그것은 당신의 C 프로그램에서 무슨 일이 일어나고 있는지 이해하는 데 많은 도움이 될 것이다.

  9. C는 모듈 범위에 대한 개념이 없으므로 포함, 프로토타입 선언 및 개인 스코프와 가져오기 식별자의 사용을 계획하십시오.

  10. C의 GUI 프로그래밍은 모든 플랫폼에서 지루하다.

  11. (10)의 Apropos는 Tcl, Lua 또는 Python과 같은 적어도 하나의 스크립팅 언어의 C API를 학습한다.많은 경우에, C를 가장 잘 사용하는 것은 실질적으로 다른 것에 쓰여진 응용 프로그램의 핵심 고성능 엔진이다.

  12. 생성자와 동등한 것은 설정할 항목에 포인터를 전달하는 초기화 함수다.흔히 이런 모습을 보이는 함수를 호출하는 형태로 볼 수 있다.setup_foo(&my_foo) 이 할 수 이 기능을 사용하여 스택에 할당한 항목을 초기화할 수 있으므로 할당과 초기화를 분리하는 것이 좋다.파괴자에게도 비슷한 원리가 적용된다.

  13. 대부분의 사람들은 헝가리어 표기법이 쓰여진 헝가리어만큼 읽을 수 있다고 생각한다.이에 대한 예외는 헝가리 원어민이다. 그들은 일반적으로 헝가리 표기법이 쿠네iform만큼 읽기 쉽다고 생각한다.불행히도 헝가리 표기법은 Windows 소프트웨어에서 광범위하게 발견되고 Win32 API 전체가 그것을 사용하며, 이 플랫폼에 쓰여진 소프트웨어의 가독성에 기대되는 영향을 미친다.

  14. C/Unix 책들, 고인이 된 W 리차드 스티븐스가 쓴 책들과 같은 정말 좋은 책들조차도 아마존 시장을 통해 꽤 저렴하게 중고로 구입할 수 있는 경향이 있다.특별한 순서 없이 K&R, 스티븐스 APUE, UNP 1 & 2, 드래곤북, 로치킨트, 프로그래밍 진주, 페트졸드, 리히터(Windows에서 작업하는 경우)와 다른 고전적인 C/Unix 작품들을 한 부 받아라.읽고, 연필로 그것들을 낙서하고, 일반적으로 책과 상호작용을 한다.

  15. 웹에는 좋은 C/Unix 프로그래밍 자원이 많이 있다.

  16. C 프로그래밍의 십계명과 그 계명의 이면에 있는 이유와 이유에 대한 메타 토론의 일부를 읽고 이해하십시오.이것은 어느 정도 나이를 보여주고 있지만, 그것의 대부분은 여전히 관련성이 있고 불명확한 컴파일러들은 여전히 임베디드 시스템 세계에서 꽤 흔하다.

  17. 렉스와 야크는 네가 파서를 쓰고 싶다면 네 친구야.

  18. Navicore가 아래 (+1)에서 지적한 바와 같이, Hanson의 'C 인터페이스 및 구현'은 모듈형 아키텍처에 대한 인터페이스/이행 설계의 런다운(run-down)이며, 다양한 예가 있다.나는 이 책을 읽었다고 주장할 수는 없지만, 실제로 이 책에 대해 들어보고 좋은 점을 들었다.내가 위에서 설명한 C 관용구들을 제외하고, 이 개념은 아마도 훌륭한 절차 설계의 핵심일 것이다.사실, Modula-2와 같은 다른 절차 언어들은 실제로 이 개념을 그들의 디자인에 명시적으로 만든다.이것은 인쇄된 'C 프로그램 아키텍처' 책과 가장 가까운 것일 수 있다.

  19. C FAQ를 읽어 보십시오.

OO에서 C로 돌아가는 나의 우려는 David Hanson의 "C 인터페이스 및 구현"에서 다루어졌다.

C 인터페이스 및 구현

심각하게, 그것의 접근방식은 많은 비-oo 시스템들이 그렇게 되는 큰 실뭉치를 실수로 만드는 것을 피하는 데 큰 차이를 만들었다.

타넨바움으로 미닉스

여기 C의 OO 프로그래밍에 관한 다른 질문에서 나온 몇 가지 흥미로운 답변이 있다.나는 내가 작업한 C 코드에 대해 글을 올렸는데, 기본적으로 가상의 방법을 포함하지 않음으로써 간단히 중단되는 것이 기본적으로 탄핵된 객체 지향이다.

만약 내가 C 코딩을 한다면, 나는 이 기술을 사용하여 '객체'를 정의할 것이다.

는 디자인 패턴을 염두에 두는 것이 항상 도움이 되고 대부분의 언어로 구현될 수 있다는 것을 발견한다.

여기 객체 지향 C 프로그래밍에 대해 논하는 멋진 PDF가 있다.

대규모 애플리케이션?C의 강점은 기기 드라이버, 스케줄러, 기타 OS 맛과 같은 낮은 수준의 것들을 다루어야 할 때 입니다.

당신은 OO처럼 작동하는 C를 만들 수 있지만, 그것은 분명히 바퀴를 재발명하는 운동처럼 느껴질 것이다.

한 가지 사소한 것은 .c 파일을 "뒤로" 주문하는 것이다. 즉, 메인()을 파일 하단에 놓고 항상 로컬 기능(즉, 방금 사용한 .h 파일에 없는 기능)이 처음 사용된 곳 위에 있는지 확인한다.이것은 당신이 그들을 위해 프로토타입을 쓸 필요가 없다는 것을 의미하는데, 만약 당신이 그들의 API를 변경해야 한다면 한 가지 덜 다룰 것이다.

그런 다음 보너스로 vim의 'gD' 명령은 동일한 파일에 있으면 항상 함수의 정의로 이동한다. :)

다소 언어에 구애받지 않는 텍스트로 쓰여져 있지만, Code Complete는 건설 관행과 함께 코드 구조와 조직에 대한 좋은 지침을 많이 제공한다.

참조URL: https://stackoverflow.com/questions/925754/resources-for-learning-c-program-design

반응형