Hola a todos:
Os planteo un caso misterioso. Os adjunto un código cuya misión es devolver una lista enlazada de nodos con información de los ficheros que hay en una carpeta. El caso es que debería devolverla ordenada y no lo hace.
El fallo lo he localizado y es muy raro, ya que la función STRING_COMPARE (fichero functions/class_string) funciona bien, y asigna al valor de salida lo que tiene que devolver: -1, 0 o 1.
Pero el valor que lee su función padre, FILELIST_GET_ORDERED_LIST (fichero functions/filelist.inc), no es el mismo. Si STRING_COMPARE devuelve -1, el padre recibe 4294967295.
Sin embargo, si camibio la declaración de STRING_COMPARE por:
function int STRING_COMPARE (string sc1, string sc2)
Devuelve el valor correctamente. Es como si por defecto devolviese un unsigned int.
He intentado reproducir el error con el siguiente código:
[code language="bennu"]program test;
global
int dato;
begin
dato=devolver();
say("Se obtuvo el valor "+dato);
end
function devolver()
begin
return(-1);
end[/code]
Pero no he podido duplicar el error. Sin embargo, con:
[code language="bennu"]program test;
global
int dato;
begin
//dato=devolver();
//say("Se obtuvo el valor "+dato);
say("Se obtuvo el valor "+devolver());
end
function devolver()
begin
return(-1);
end[/code]
Sí ha sucedido. O sea, que devuelve un unsigned int, pero si se asigna a un int, el valor se ve correcto.
¿Es un fallo o es que se cambió el valor devuelto por defecto de int a unsigned int y no me he enterado?
He usado la versión r228 para windows, en formato RAR.
es correcto lo que te pasa, declara bien los tipos de las funciones que retornan valor al escribirlas y listo.
¿Pero entonces es que se ha cambiado el valor devuelto por defecto? Antes era int (con signo).
Aprovecho para preguntar ¿finalmente pueden retornar strings las funciones?
Y otra relacionada con los arrays de string: se que dan problemas, y que se desaconsejan en favor de una lista enlazada con tipos definidos que incluyan una string. Pero ¿qué pasa con funciones como SPLIT?
no ha cambiado nada, depende tambien de que funcion recoge el parametro, autodeclaraciones, y puede que alguna otra cosa que me olvide.
si, pueden retornar string las funciones, pero debe ser declarada como string.
no entiendo que decis del array de strings y de split...
Pues te digo yo que, por defecto (al menos, desde Fenix) las funciones devuelven enteros en caso de que no se definieste el tipo de salida.
Y respecto a SPLIT, este comando devuelve un array de string (lo que hace es dividir una string en varias según la cadena de separación que se le diga por parámetro), por lo que si los array de strings no funcionan bien, esta función dará muchos problemas ¿no?
De momento ya estoy trabajando en mi propia "clase" de manejo de listas de STRINGs, en cuanto la termine os la subo por si alguien la quiere usar.
no me has entendido lo que dije, pero nada, devuelven lo mismo que fenix... un int signed si lo recibis en una variable unsigned o como parametro de algo que espera unsigned, sera unsigned.
se bien lo que hace split, solo que no te entendi que decias...
no, los arrays de strings funcionan, salvo que creo que esas strings no se liberaran al morir el proceso...