【发布时间】:2014-05-12 18:04:59
【问题描述】:
所以我正在编写一个生成函数的程序。我正在使用 GCC 嵌套函数模拟 lambda 表达式。但我遇到了奇怪的程序动作。也许我不知道这背后的一些理论,女巫带领我的程序做奇怪的动作。在这里我写了非常简化的代码,我在下面指出了问题所在。 程序应该只打印 N 次 '1337',但程序只打印一次就发疯了。
#include <stdio.h>
#include <stdlib.h>
#define lambda(return_type, function_body) \
({ \
return_type __fn__ function_body \
__fn__; \
})
void init(void (**fn)()){
int num = 1337;
*fn = lambda(void,(){printf("%d\n",num);});
}
int main(){
void (*fn)();
init(&fn);
fn(); // Everything is fine, it prints '1337'
fn(); // It prints '-1869573949' , maybe accessing memory somewhere
fn(); // It does not print anything at all
... // It does not print anything at all
return 0;
}
我想指出,如果我改变了
void init(void (**fn)()){
int num = 1337;
*fn = lambda(void,(){printf("%d\n",num);});
}
到
void init(void (**fn)()){
*fn = lambda(void,(){printf("%d\n",1337);});
}
有效,但不能满足我的需求。
感谢您提供有关此问题的任何帮助或信息,因为我对此非常感兴趣。
【问题讨论】:
-
谢谢,它解决了我的问题。
-
@self。它是宏的返回变量。
-
@pmg Tnx,这就是它没有编译的原因。
标签: c function lambda crash functional-programming