Je suis en train de créer un code similaire à celui-ci :
#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;
}
Cela se compile parfaitement dans GCC (sans aucun avertissement) mais ne se compile pas dans ICC.
La CCI donne :
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'est-ce que je fais de travers ?
Merci.
(edit) Désolé pour le mauvais exemple. Dans mon code original, j'ai un peu besoin de faire ce genre de choses. J'utilise un intégrateur numérique GSL et j'ai quelque chose comme :
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);
}
Et j'ai beaucoup de fonctions avec ce type de structure : elles sont le résultat d'une intégration d'une fonction avec beaucoup de paramètres externes. Et les fonctions qui implémentent l'intégration numérique doivent recevoir un pointeur vers une fonction de type :
double f(double x, void * par)
J'aimerais vraiment que les fonctions soient imbriquées de cette manière afin que mon code ne soit pas alourdi par de nombreuses fonctions. Et j'espère pouvoir le compiler avec ICC pour accélérer un peu les choses.