簡體   English   中英

C函數只調用一次和圈復雜度

[英]C function only called once and cyclomatic complexity

我認為這個問題更多的是關於風格:我的算法具有非常高的CC(以及很多行!)。 我想減少它,因為有一些代碼可以分組,所以很容易。 問題是以這種方式做事我會有一個“大”函數調用“小”函數,只調用一次。

在我看來,盡管函數被調用一次,但是以小塊形式打破一個大函數對於代碼的易讀性(在這種情況下)更好。

你怎么了? 在類似情況下你怎么辦?

將一個大功能分解為更小的,大多是獨立的塊是一個非常好的主意。 它使代碼更具可讀性,控制流程更清晰。

如果函數是靜態的並且只調用一次,那么編譯器可能會在沒有被詢問的情況下為您內聯它們,因此無需擔心運行時成本。

擁有只調用一次的函數沒什么不好的。
它們保持你的代碼整潔,你不會丟失任何東西,只需添加函數調用,對於你只調用一次的函數沒有真正的性能損失。

超越內聯,有很多函數只調用一次。

讓我們說我們有這樣的結構:

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

我們寫一些東西來初始化/分配它:

foo_t *foome(void)
{
    foo_t *ret;

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

    ...
    ...
}

但是,為什么我們去克服這些困難時foome()被調用一次,在main() 因為我們希望下一個必須處理我們程序的人能夠查看main()並立即了解我們要完成的任務。

我寧願看到具有幾十個一次性函數的代碼,如果它意味着復雜的算法在單個(或關閉)屏幕中讀取就像一本書。 當我不得不在試圖保持我的位置的同時向上和向下滾動一百行時,我無法告訴你我的頭疼多少。

這樣可以節省理智並有助於環境,因為現在我不需要打印出所有60頁的算法,並將它們安排在桌面上以便能夠閱讀它:)

如前所述,將一個大功能分成幾個小功能有很多優點。 可讀性(具有適當的命名),局部變量的分組(函數中使用的臨時變量更接近,提供更好的緩存行為),可能會發生其中一個函數可以在其他地方重用,之前不可見的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM