[英]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語言不是很友好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.