【发布时间】:2009-06-05 19:10:26
【问题描述】:
我正在制作一个类似这样的代码:
#include <stdio.h>
double some_function( double x, double y)
{
double inner_function(double x)
{
// some code
return x*x;
}
double z;
z = inner_function(x);
return z+y;
}
int main(void)
{
printf("%f\n", some_function(2.0, 4.0));
return 0;
}
这在 GCC 中完美编译(没有警告),但在 ICC 中编译失败。
ICC 给出:
main.c(16): error: expected a ";"
{
^
main.c(21): warning #12: parsing restarts here after previous syntax error
double z;
^
main.c(22): error: identifier "z" is undefined
z = inner_function(x);
^
compilation aborted for main.c (code 2)
我做错了什么?
谢谢。
(编辑)对不起这个可怜的例子。在我的原始代码中,我有点需要做这些事情。我正在使用 GSL 数值积分器并有类似的东西:
double stuff(double a, double b)
{
struct parameters
{
double a, b;
};
double f(double x, void * params)
{
struct parameters p = (struct parameters *) params;
double a = p->a, b = b->b;
return some_expression_involving(a,b,x);
}
struct parameters par = {a,b};
integrate(&f, &par);
}
我有很多具有这种结构的函数:它们是函数与大量外部参数集成的结果。而实现数值积分的函数必须接收一个指向函数类型的指针:
double f(double x, void * par)
我真的很希望以这种方式嵌套函数,这样我的代码就不会因大量函数而膨胀。我希望我可以用 ICC 编译它以加快速度。
【问题讨论】:
-
你们太棒了!!在不到 2 分钟的时间里,我得到了完整的答案!!
-
你好,我喜欢你喜欢的函数......
-
这就是为什么我需要 C 中的 lambda 表达式。:(
-
关于“我根本不明白为什么你真的需要嵌套函数。”,更多人转向这种开发风格的原因是转向 JavaScript 的命名空间和范围机制。一个函数封装了其他函数,并通过一个结构体暴露了函数。这是否会简化开发或未来库的使用,我还没有看到。