2010-05-21 6 views
4

나는이 질문이 스타일에 대한 자세한 생각 : (! 라인의 많은) 나는 매우 높은 CC가있는 알고리즘을 가지고있다. 나는 그것을 줄이기를 원하며 그룹화 할 수있는 코드 조각이 있기 때문에 쉽다. 문제는 이런 식으로 일을하는 것은 "큰"함수가 "작은"함수를 호출하고 한 번만 호출된다는 것입니다. 작은 조각에 큰 기능을 파괴 제 생각에는C 함수를 한 번만 호출 및 복잡성을

함수를 한 번 호출에도 불구하고 (이 경우) 코드의 가독성을 위해 더 낫다.

당신은 무엇입니까? 비슷한 경우에도 어떻게해야합니까?

답변

7

큰 기능을 작은 분리 된 청크로 분할하는 것은 완전히 좋은 생각입니다. 코드를보다 읽기 쉽고 제어 흐름을보다 명확하게 만듭니다. 기능이 한 번만 정적이라는 경우

는, 컴파일러는 아마 질문을받지 않고 당신을 위해 그들을 인라인, 그래서 런타임 비용에 대해 걱정할 필요가 없습니다.

+0

일을 :) 읽을 수 있도록 지금은 알고리즘의 모든 60 페이지를 인쇄하고 테이블에 그들을 배치 할 필요가 없기 때문에

이, 정신을 절약하고 환경을하는 데 도움이 정적 함수의 인라이닝 –

+1

정적 인 경우가 아니더라도 함수는 인 코드 될 수 있습니다. 물론 코드 중복을 피할 수 있습니다. 그리고 그것이 일어나지 않더라도 링크 타임 코드 생성은 여전히 ​​인라이닝을 수행 할 수 있습니다. – Thomas

3

한 번만 호출되는 기능을 갖는 것은 좋지 않습니다.
코드를 깔끔하게 유지하면서 아무 것도 잃지 않고 함수 호출을 추가하기 만하면 한 번만 호출하는 함수에 대해서는 실제 성능이 저하되지 않습니다.

0

이미 말했듯이 몇 개의 작은 함수를 큰 함수로 분할하면 많은 장점이 있습니다. 가독성 (적절한 이름 지정), 지역 변수 그룹화 (함수에 사용 된 임시 변수가 더 가까워짐에 따라 캐시 동작이 개선됨) 이전에 표시되지 않은 다른 곳에서 이러한 함수 중 하나를 재사용 할 수 있습니다.

2

인라이닝을 넘어선 단계에는 한 번만 호출되는 많은 기능이 있습니다.

우리는이 같은 구조가 있다고 가정하자 :

foo_t *foome(void) 
{ 
    foo_t *ret; 

    ret = (foo_t *) malloc(sizeof(struct foo)); 

    ... 
    ... 
} 

을하지만 우리는 모든 문제를 통해 이동 않은 이유 foome()가 호출 될 때 :

typedef struct foo { 
    char *foo; 
    int bar; 
    double foobar; 
} foo_t; 

을 우리가 초기화 뭔가/쓰기를 할당 한 번만 main()에? 우리는 프로그램을 다루어야하는 다음 사람이 main()을 볼 수 있기를 원하기 때문에 우리가 성취하려는 것을 즉시 이해합니다.

나는 오히려 복잡한 알고리즘은 하나의 (또는 닫기) 화면에서 책처럼 읽는 것을 의미하는 경우, 한 시간 함수 수십를 가지고 코드를 볼 것입니다. 나는 내 자리를 지키려고 시도하면서 수백 줄 위아래로 스크롤해야 할 때 머리가 얼마나 아프는지 말할 수 없다. 그냥 언급에 대한

관련 문제