我正在做一个类似这样的代码:
#include
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编译它来加速一点。