나는 객체 지향 코드 시대에 전문 프로그래머가되었고 수년간의 C++ 프로그래밍 경력을 가지고 있습니다. 나는 수년간의 레거시 코드를 가진 커다란 프로젝트를 C + +와 C의 혼합으로 작업합니다. 시스템의 순수한 부분에서 작업하는 것이 덜 편합니다. C++로 프로그래밍 할 때 모든 C 구문을 이해할 수 있지만, 객체가없는 복잡한 C 프로그램을 구성하는 방법에 대한 지식과 내가 채우기를 원하는 메모리를 관리하기위한 최적의 방법은 무엇인지 알 수 있습니다. 나는 자바 프로그래머로 일한 후에 C++을 배웠고, C++ 프로그래머와 C++ 프로그래머로 번역 된 자바를 조금 더 만들 것이라고 생각한다.실력있는 C++ 프로그래머가 C를 배우는 데 도움이되는 자습서가 있습니까?
답변
POSIX APIs보고 조직의 관점에서가, 특히 pthreads 당신에게 C 코드를 구성하는 방법에 대한 좋은 아이디어를 줄 것이다. 좋은 C 프로젝트 조직의 기본 규칙은 다음과 같습니다.
- 구조물을 노출시키지 마십시오. 불투명 한 유형 만 사용하십시오.
- 함수 이름의 접두사로 라이브러리 및 데이터 유형 이름을 사용하십시오.
- 할당/구성 및 소멸/할당 해제를위한 "작성"및 "삭제"기능을 제공하십시오.
- 해당 유형에서 작동하는 함수의 첫 번째 매개 변수로 은폐 데이터 형식을 전달하십시오.
- C 또는 C++를 사용하여 C API를 구현합니다 (사용자의 책임). 분명히 거기에 불투명하지 않은 유형을 사용하십시오.
포인터를 광범위하게 사용하여 건물 프로그램을 살펴 본다. 어쨌든 낮은 수준의 구조체가 내 의견으로는 좋은 시작이 될 것입니다. 그것은 또한 프로그램이 무엇을 위해 만들어 졌는지에 달려 있습니다. 임베디드 rtos 보드 또는 마이크로 컨트롤러 시스템에 C 코드를 작성하려고합니까?
저는 c가 많은 레거시 시스템에서 일하는 경우가 있습니다. 그래서 그것이 초기의 이유입니다. 또한 모든 것이 객체가되어야한다고 가정하기보다는 struct 및 다른 c 기술의 데이터를 기반으로 구축 된 프로그램을 설계하는 데 더 익숙해지는 것이 더 나은 C++ 프로그래머가 될 것이라고 생각합니다. –
그럴 경우 Java에서 포인터를 처리 할 수 없으므로 포인터 지식을 향상시킬 것을 적극 권장합니다. 하드웨어 최적화에 대해 배우고 싶다면 임베디드 싱글 보드 컴퓨터, 마이크로 컨트롤러 또는 스마트 폰/PDA를 사용하여 하드웨어에 최적화 된 C/C++ 작성 방법을 배우는 것이 좋습니다. – stanigator
나는 기본적으로 너와 같은 배가었지만 (경험이 적었지만 자바보다는 파이썬으로 시작했다.) 나에게 가장 잘 맞는 것은 Kernighan과 Ritchie를 읽고 앉아서였다. 구문에 익숙하기 때문에 책의 전반부는 건너 뛸 수 있지만 저수준 메모리 관리에 대해 더 잘 이해할 수 있습니다.
메모리 관리와 관련된 Linux 커널 소스 부분을 읽는 것도 도움이되지만 마음이 희미하거나 쉽게 지루할 수는 없습니다.
확장 another answer에, 한 가지 방법은 작성하는 것입니다 객체 지향 C.이 (예를 들어 그놈 스택이 주로 G 객체를 기반으로 거의 완전히 객체 지향 C, 대부분의 도서관은 내가 행동과 상호 작용하는 방법 라이브러리를 쉽게 만들 수 있습니다). 통사론적인 설탕없이 C++로 생각할 수 있습니다.
당신은 거의 정확하게
class Foo {
public:
Foo() { /* whatever */ }
int make_waffles (int no_of_guests) {}
};
int main() {
Foo *my_foo = new Foo();
my_foo->make_waffles (1);
delete my_foo;
}
에 또한 커니 핸과 리치가 쓴 The C Programming Language ANSI C Edition을 확인할 수 있습니다 해당
/* in project NewStuff; namespace is ns */
ns_foo_t *ns_foo_new();
void ns_foo_delete (ns_foo_t *);
int ns_foo_make_waffles (ns_foo_t *this, int no_of_guests);
int main() {
ns_foo_t *my_foo = ns_foo_new();
ns_foo_make_waffles (my_foo, 1);
ns_foo_delete (my_foo);
}
같은 API와 끝까지.예, 오래된 것입니다. 그러나 표준 라이브러리뿐만 아니라 전체 언어를 다루는 약 200 페이지의 시계 만 있습니다.
- 1. 내가 배우는 데 도움이되는 프로젝트를 아는 사람이 있습니까?
- 2. 휴대용 C를 작성하기위한 온라인 자습서가 있습니까?
- 3. 이 도움말 시스템을 구현하는 데 도움이되는 Ruby on Rails gems/jQuery 플러그인/자습서가 있습니까?
- 4. 숙련 된 프로그래머를위한 objective-C를 배우는 책
- 5. Clang을 스크립트 인터프리터로 C++ 코드에 포함시키는 데 필요한 자습서가 있습니까?
- 6. C#에서 자바 스크립트 코드를 작성하는 데 도움이되는 라이브러리가 있습니까?
- 7. C# 3.0에는 정적 HTML을 생성하는 데 도움이되는 클래스가 있습니까?
- 8. 베테랑 Java 프로그래머가 C를 마스터하기 위해 어디에서 시작해야합니까?
- 9. EJB를 배우는 데 필요한 리소스
- 10. C++ 프로그래머가 memset을 피해야합니까?
- 11. Visual Studio를 사용하여 ActiveX 컨트롤을 만드는 데 유용한 자습서가 있습니까?
- 12. 이미지 검색 알고리즘을 배우는 데 도움이
- 13. 좋은 SharpNEAT 자습서가 있습니까?
- 14. 괜찮은 QtScript 자습서가 있습니까?
- 15. 초보 프로그래머가 요즘 "데스크톱"응용 프로그램을 작성하는 데 시간을 할애해야할까요?
- 16. 깊은 재귀를 디버깅하는 데 도움이되는 유용한 팁이 있습니까?
- 17. Java에서 C#으로 계속 변환하는 데 도움이되는 도구
- 18. 프로그래밍의 기본이 아닌 C++ 자체를 배우는 데 필요한 리소스는 무엇입니까?
- 19. 내 jquery에서 오류를 찾는 데 도움이되는 도구
- 20. 큰 데이터베이스를 계획하는 데 도움이되는 팁
- 21. oauth를 이해하는 데 도움이되는 의사 코드가 필요합니다.
- 22. PrintDocument를 만드는 데 도움이되는 도구는 무엇입니까?
- 23. iPhone 응용 프로그램을 데이터베이스에 연결하는 데 유용한 자습서가 있습니까?
- 24. 스트림, 버퍼 및 Java에서의 사용법을 이해하는 데 필요한 자습서가 있습니까?
- 25. vb를 사용하여 Windows phone 앱을 개발하는 데 필요한 자습서가 있습니까?
- 26. 피스톤으로 OAuth를 사용하는 데 필요한 유용한 자습서가 있습니까?
- 27. android : 앱용 메뉴를 만드는 데 필요한 자습서가 있습니까?
- 28. 동료 C++ 프로그래머가 도움이 이제
- 29. WPF를위한 좋은 통계 차트를 만드는 데 도움이되는 라이브러리가 있습니까?
- 30. IPTC 데이터를 JPEG에 임베드하는 데 도움이되는 PHP 클래스가 있습니까?
내가 자습서를 찾은 것은 c 프로그래머가 C++로 이동한다고 가정하는 것입니다. 분명히 C를 더 잘 이해하고자하는 유일한 객체 지향 프로그래머가 될 수는 없습니다. –
문제가 발생하지 않게하는 방법을 가르쳐주는 중간 크기의 C 프로그램을 몇 개 작성하면 생각합니다. 실제로 어떤 언어로든 문제가 생기는 것은 배울 가치가있는 방법입니다. 뜨겁게 만지는 것. – Nosredna
StackOverflow에는 이미이 질문에서 몇 가지 질문이 있습니다. 대부분 C++의 관점에서 기능하는 제 네이티브 C 스피커에서 보았을 때 좋았던 여러 가지 조언을 보았습니다. 그들은 사냥 가치가 있을지 모릅니다. – dmckee