簡體   English   中英

C塊范圍功能?

[英]C block scope functions?

是否可以創建一個適用於塊范圍的函數?

編輯澄清

enum { cannot, must };
int it(enum modal verb);

describe(fx) {
    context("some context") {
        it(must) { /* Some test that returns an int to it() */ };
    }
}

我懷疑這是可能的,那么我能做的下一個最好的事情是什么?

這對我來說看起來幾乎像Smalltalk或Ruby,這讓我覺得你想要將閉包 (有時稱為 )傳遞給函數。 這可以通過C的各種擴展來實現,也有解決方法。

例如,您可能希望迭代列表:

{
    // this does not actually work, sorry
    iterate(list) { |i| -> printf("%d\n", i); }
}

如果您使用Apple的C擴展,您可以使用稱為“塊”的東西

{
    // Apple only
    iterate(list, ^(int i) { printf("%d\n", i); });
}

你也可以寫一個回調,

static void my_callback(int i) { printf("%d\n", i); }

...
{
    iterate(list, my_callback);
}

回調函數無法訪問其他函數中的變量,因此您必須找到一種共享變量的方法。

GCC中有嵌套函數; 這些可以像Apple的“塊”擴展一樣訪問范圍變量。

{
    // GCC only
    void callback(int i) { printf "%d\n", i); }
    iterate(list, callback);
}

如果你發現自己想要做很多事情,你可以通過切換到C以外的語言來省去很多頭痛。對於高階編程來說,C語言不是很友好。

我不確定你想要什么,但也許GCC的嵌套功能擴展可以滿足你的需求。 請注意,它是非標准擴展(並且其他一些編譯器不提供它)。

請注意C函數(遺憾地)不是閉包 ; 這是切換到某種功能語言的原因(如Ocaml,Haskell,Scheme ...)。

暫無
暫無

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

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