[NDS]Warning con funciones inline

Holaaaa

Estoy compilando mi proyecto, pero metí un PA_EasyBgLoad dentro de una sentencia if y me salta un warning diciendome que la funcion inline no le mola ahi dentro, que el código podría ser muy largo o no se que rollo.

inlining failled in call to 'void T.347(u8)': call is unlikely and code size would grow


¿Puede que el compilador defina las funciones inline como near y no como far? o.o

Sabéis cómo puedo evitar el warning? Para que declararan las funciones inline con lo facil que es abrir y cerrar llave? xDD
Darknoe escribió:¿Puede que el compilador defina las funciones inline como near y no como far?

No se yo si eso se aplicará al procesador de la DS...

Pues a ver, PA_EasyBgLoad es una macro, para empezar, no se muy bien a qué función llamará internamente... De todos modos, a veces al compilador le da por tocar las narices aunque no hagas nada mal.

¿Cómo has declarado a la función?
ANTONIOND escribió:¿Cómo has declarado a la función?


A ver si puedo explicarlo sin hacerme un lio xD

Tengo una clase X para los backgrouds e imagenes, dentro de la clase X tengo una funcion donde pongo el background, pero como que según una variable quiero poner un bg u otro, pues hice un switch, y desde que puse el switch me dice lo del inlining error:

void PonerBG(int opcion){
    switch(opcion){
        case 1: PA_EasyBgLoad(1, fondo1);
        case 2: PA_EasyBgLoad(1, fondo2);
        //etc...
}


Que si cojo y cada case lo pongo en una función aparte, el codigo no me genera ningun warning, pero tendre como 23759483758943725 funciones, con lo facil y limpio que es tener ese maravilloso switch xD

//Este codigo si que le gusta al compilador, pero a mi no xD
void fondo1(void){
    PA_EasyBgLoad(1, fondo1);
}

void fondo2(void){
    PA_EasyBgLoad(1, fondo2);
}

void PonerBG(int opcion){
    switch(opcion){
        case 1: fondo1();
        case 2: fondo2();
        //etc...
}


Son warnings, no es un error chungo, asi que si quiero evitarlos y el compilador es tan majo, pues lo hare a lo burro, creare un fichero aparte con la definicion de todas las llamadas para los fondos.

Thanks!
No se si se los habras omitido al poner el codigo aqui, pero si en el switch no pones los breaks, se ejecutaran todas las funciones desde la opcion que le pases.

Aparte de esto, si tienes un monton de variables fondo1, fondo2, fondo3 etc. Una manera facil de arreglarlo y ademas ahorrarte el switch es que crees un vector y ya está (si son variables que no lo se, pero tiene pinta).

void PonerBG(int opcion)
{
    PA_EasyBgLoad(1, fondos[opcion]);
}


Un saludo.
parrincrisis escribió:
void PonerBG(int opcion)
{
    PA_EasyBgLoad(1, fondos[opcion]);
}

PA_EasyBgLoad es un macro, no puedes hacer eso porque genera los argumentos para la función a la que llama a partir del nombre que le das del fondo. Es una de las cosas que han cambiado (a mejor) en las últimas PAlib, ya no se hace así, se hace con structs en las que ya si se permitiría hacer lo del array.

Imagino que será algo del compilador... ¿Has probado con if()else if()...?
Eso es cosa de una versión antigua de palib, actualiza a la última versión y no te saldrá.
rockymartinez escribió:Eso es cosa de una versión antigua de palib, actualiza a la última versión y no te saldrá.


Ya puede ser ya, pero me da palo actualizarlo XD
Al final tendre que hacerlo... u.u
6 respuestas