我知道C不支持嵌套函數,它只是一個gcc擴展。但即便如此,這種行爲也很奇怪。C語言調用嵌套函數
看起來嵌套函數只能調用一次;第二次調用導致SIGSEV,有時SIGILL。我想爲堆棧等結構嵌套函數。在堆棧中,我可以定義pop,push等功能,我將使用嵌套函數來分配函數,這些函數將引用正常的函數,我將會得到這些函數。這個函數就像一個構造函數或初始化器。但是這個代碼足以模擬我的問題。
當生成函數將innerFunction分配給struct時,第二次調用會導致錯誤。如果分配給測試功能,則第二次調用是可以的。
請問問題在哪裏?在gcc文檔中,它說只要你有內部函數地址,你就可以訪問這個函數,嵌套函數可以訪問上面定義的所有變量。
typedef struct A A;
struct A {
void (*foo)();
};
void test() {
printf("test\n");
}
void generate(A* a) {
void innerTest(){
test();
}
a->foo = &innerTest;
}
int main() {
A a;
generate(&a);
a.foo();
a.foo();
};
你的問題是什麼?我正確編譯並執行了你的代碼。 – acornagl
我認爲嵌套函數不符合。即使它可能工作 –
[文檔](https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested-Functions)實際上說「*如果您嘗試通過其地址調用嵌套函數在包含函數退出後,所有地獄崩潰。*「 – melpomene