这个问题不是很具体。这真的是为了我自己的 C 丰富,我希望其他人也能发现它有用。
免责声明:我知道很多人会冲动地回应“如果你正在尝试做 FP,那么就使用函数式语言”。我在需要链接到许多其他 C 库的嵌入式环境中工作,并且没有太多空间容纳更多大型共享库,并且不支持许多语言运行时。此外,动态内存分配是不可能的。我也只是很好奇。
我们中的许多人都看过这个用于 lambda 表达式的漂亮 C 宏:
#define lambda(return_type, function_body) \
({ \
return_type __fn__ function_body \
__fn__; \
})
一个示例用法是:
int (*max)(int, int) = lambda (int, (int x, int y) { return x > y ? x : y; });
max(4, 5); // Example
使用gcc -std=c89 -E test.c
,lambda 扩展为:
int (*max)(int, int) = ({ int __fn__ (int x, int y) { return x > y ? x : y; } __fn__; });
所以,这些是我的问题:
行int (*X);究竟是什么?宣布?当然,int * X;是指向整数的指针,但这两者有何不同?
看看扩展的宏,final到底是
__fn__
做什么的?如果我编写一个测试函数void test() { printf("hello"); } test;
- 会立即引发错误。我不明白那种语法。这对调试意味着什么?(我打算用这个和gdb来试验自己,但其他人的经验或意见会很棒)。这会搞砸静态分析仪吗?