Я делаю код, похожий на этот:
#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, чтобы немного ускорить работу.