estoy haciendo un código que es similar al siguiente:funciones dentro de las funciones en C
#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;
}
Esto compila perfectamente en GCC (sin advertencias), pero falla al compilar, en el ICC.
CPI da:
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)
¿Qué estoy haciendo mal?
Gracias.
(corregir) Perdón por el pobre ejemplo. En mi código original, necesito hacer esto. Estoy usando un integrador numérico GSL y tener algo como:
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);
}
Y tengo un montón de funciones con este tipo de estructura: son el resultado de una integración de una gran cantidad de funciones con parámetros externos. Y las funciones que implementa la integración numérica deben recibir un puntero a una función del tipo:
double f(double x, void * par)
me gusta mucho funciones para anidarse esta manera por lo que mi código no se hinche con montones de funciones. Y espero poder compilarlo con ICC para acelerar un poco las cosas.
Ustedes rocas !! ¡En menos de 2 minutos tuve respuestas completas! –
Yo dawg, quiero que te gusten las funciones ... – GreenieMeanie
Es por eso que necesito expresiones lambda en C. :( –