C에 "디자인 패턴"이 있습니까?
디자인 패턴은 일반적으로 OO 프로그래밍과 관련된 것임을 알고 있지만 C를 프로그래밍 할 때 자주 사용하는 패턴이 있습니까?
나는 고전적인 OO 패턴의 간단한 번역에 관심이 없으며 Duff의 장치에 대해서는 언급하지 마십시오. ;-)
내가 가장 좋아하는 것은 Adam Tornhill 의 "Patterns in C"시리즈입니다 .
또한 : 나는 항상 goto
데코레이터 패턴을위한 훌륭한 가난한 사람의 도구 라고 생각 합니다.
업데이트 : c를 사용해야하는 경우를 제외하고는 C 대신 Rust ( rust-lang.org )를 사용하는 것이 좋습니다 . Rust는 속도와 c와의 바이너리 라이브러리 호환성을 포함하여 c의 모든 이점을 가지고 있지만 컴파일러는 코드가 메모리에 안전하고 데이터 레이스를 포함하지 않도록하기 위해 많은 복잡성을 처리합니다. 또한 이식 가능하고 일반적인 작업을위한 표준 라이브러리가 있으며 다양한 디자인 패턴을위한 프로그래밍이 훨씬 쉽습니다.
디자인 패턴은 누락 된 언어 기능으로 볼 수 있습니다. 디자인 패턴 소개 : 재사용 가능한 객체 지향 소프트웨어의 요소는 다음과 같이 설명합니다.
프로그래밍 언어의 선택은 자신의 관점에 영향을주기 때문에 중요합니다. 우리의 패턴은 스몰 토크 / C ++ 수준의 언어 기능을 가정하고 그 선택에 따라 쉽게 구현할 수있는 것과 구현할 수없는 것이 결정됩니다. 절차 적 언어를 가정했다면 "상속", "캡슐화"및 "다형성"이라는 디자인 패턴을 포함했을 수 있습니다. 마찬가지로, 일부 패턴은 덜 일반적인 객체 지향 언어에서 직접 지원됩니다. 예를 들어 CLOS에는 방문자와 같은 패턴의 필요성을 줄이는 다중 방법이 있습니다. ( 이탤릭체 내 )
이탤릭체로 된 문장이 질문에 대한 답입니다.
콜백을 통한 다형성 (예 : 표준 라이브러리의 qsort
기능). 필요한 것은 두 요소를 비교하는 방법이며, 그 배열을 정렬 할 수 있습니다.
함수 집합 (vtables)을 사용하여 형식의 관련 속성을 표현하여 일반 루틴이 유용하게 처리 할 수 있도록하면 이보다 훨씬 더 정교해질 수 있습니다. 예를 들어, 읽기, 쓰기 등은 열린 파일 또는 네트워크 포트를 호출합니다.
네, 있습니다. 지연 초기화, 싱글 톤, 객체 풀, 객체 상태 등은 순수 C에서 쉽게 구현됩니다.
예 (지연 초기화)
#include <stdio.h>
struct foo
{
int payload;
};
int calculate_payload()
{
printf("%s\n", "Performing lengthy initialization...");
return 42;
}
struct foo *get_default_foo()
{
static int foo_calculated = 0;
static struct foo default_foo;
if (!foo_calculated) /* assuming single-threaded access */
{
foo_calculated = 1;
default_foo.payload = calculate_payload();
}
return &default_foo;
}
int main()
{
struct foo *foo1, *foo2;
printf("%s\n", "Starting the program");
foo1 = get_default_foo();
printf("%d\n", foo1->payload);
foo2 = get_default_foo();
printf("%d\n", foo2->payload);
return 0;
}
내 머릿속부터
Design Patterns often model things that are just one level from what an existing environment offers. If you take C with its standard library as the environment an eminent design pattern is Object Orientation.
Virtual File System is perfect example for learning the Design Pattern.
참고URL : https://stackoverflow.com/questions/4112796/are-there-any-design-patterns-in-c
'Development Tip' 카테고리의 다른 글
Git이 더 현대적인 SHA를 사용하지 않는 이유는 무엇입니까? (0) | 2020.10.19 |
---|---|
C 비 차단 키보드 입력 (0) | 2020.10.19 |
Highcharts-redraw () 대 새로운 Highcharts.chart (0) | 2020.10.19 |
객체 지향 C ++ 코드 용 C 래퍼 API 개발 (0) | 2020.10.19 |
grep regex 공백 동작 (0) | 2020.10.19 |