2008-09-14 9 views
8

que tienen una función que me da la siguiente advertencia:¿Cómo deshabilitar una advertencia en Delphi sobre "el valor de retorno ... podría estar indefinido"?

[DCC] advertencia filename.pas (6939): W1035 Valor de retorno de la 'función' función podría ser indefinido

La función, sin embargo, es limpio, pequeño y tiene un valor de retorno conocido y esperado. La primera instrucción de la función es:

Result := ''; 

y no hay una variable local o parámetro llamado Result tampoco.

¿Hay algún tipo de directiva similar a pragma que pueda rodear este método para eliminar esta advertencia? Esto es Delphi 2007.

Lamentablemente, el sistema de ayuda en esta instalación de Delphi no funciona, por lo tanto, no puedo abrir la ayuda para esa advertencia en este momento.

¿Alguien sabe por la parte superior de su cabeza lo que puedo hacer?

+0

@NGLN En el duplicado vinculado, el código definitivamente no establece 'Result' y la advertencia del compilador en ese caso podría deberse a que el compilador no ve que 'Abort' terminará el método sin permitir que regrese correctamente. En mi pregunta, sin embargo, el código definitivamente estableció 'Result' ya que fue literalmente la primera declaración del método. ¿Estás * seguro * este es un buen duplicado? –

+0

O disparar, esgrimí el [martillo de dupe] (http://meta.stackexchange.com/questions/231625/please-remind-me-when-i-am-wielding-the-dupe-hammer); esa no era mi intención Puedo ver la diferencia ahora, pero creo que el título debería haber sido algo así como _¿Por qué este valor de retorno está indefinido (y cómo resolverlo)? _. Pero si no es un duplicado, todavía no estoy seguro de que esta pregunta no se cierre porque suena como "Muy localizado". Votaré para volver a abrir, ya que ninguno de los dos fue marcado como engañado cuando [esta respuesta] (http://stackoverflow.com/a/4204619/757830) fue publicada, y se lo dejo a la comunidad para que decida. – NGLN

Respuesta

6

¿Seguro que has hecho todo lo posible para resolver el aviso? ¿Tal vez podrías publicar el código para que lo miremos?

puede desactivar la alerta local de esta manera:

{$WARN NO_RETVAL OFF} 
function func(...): string; 
begin 
    ... 
end; 
{$WARN NO_RETVAL ON} 
+0

La primera declaración en la función le está dando a la función un valor de retorno predeterminado. El resto de la función es una declaración de caso y algunas llamadas a otras funciones desde los puntos de caso. –

1

Parece haber algún tipo de error en Delphi. Leer este post, los últimos vínculos de comentarios a otros informes de error que puede ser el que usted tiene:

http://qc.codegear.com/wc/qcmain.aspx?d=8144

+0

Lo sé, también hay un informe de error similar sobre demasiadas variables locales y los parámetros combinados causan esto, pero esta función es realmente simple. De todos modos, Delphi tiene problemas. What else is new :) –

1

El {$ WARN NO_RETVAL OFF} es lo que está buscando, pero en general me gusta para averiguar por qué este tipo de cosas sucede. Puede considerar formatearlo de manera diferente y ver si eso ayuda.

¿Tiene algún comando para alterar el flujo como Exit? ¿Levanta directamente excepciones, etc.? ¿Su declaración de caso tiene un else al final que establece un valor en Result?

Podría intentar ajustar esos elementos y ver si eso elimina la advertencia también.

1

Para obtener una buena respuesta para esto, tendrá que publicar el código. En general, el compilador Delphi dará esta advertencia si hay una posible ruta de código que podría provocar que el resultado no se defina. A veces, la ruta del código es menos que obvia.

+1

Cuando la ruta del código sigue una línea de código inicial e incondicional que inicializa explícitamente el "resultado" (como se explica en la pregunta), no importa qué tan obvia sea la ruta del código que la advertencia es falsa (en este caso). – Deltics

+0

Acepto que necesitamos ver el código para ayudar. En mi experiencia, Delphi nunca advierte sobre el valor de devolución faltante cuando el tipo de devolución es cadena. Incluso si el resultado no está establecido. –

3

No estoy seguro de querer ver el código de esta unidad ... después de todo, el error ocurre en la línea 6939 ... ¿Se ha excedido alguna tabla interna del compilador?

+1

Estoy de acuerdo. He visto esta advertencia con D2006 sobre un método que contiene una gran declaración de caso con ramificación anidada. Al eliminar algunas de las rutas de código, la advertencia desapareció, sin importar qué ramas se eliminaron. Entonces parece que hay un límite en la cantidad de ramificaciones que puede suceder antes de que el compilador deje de buscar y asume que debe haber al menos una ruta que no establece el resultado :) – WileCau

1

Existe un error en el compilador Delphi, al menos, Delphi4: si la suma de números de los parámetros de la función (incluido el Uno mismo y el Resultado) y las variables locales excede el 31, causa problemas. Por ejemplo, puede escribir advertencias W1035 (el resultado puede estar indefinido). No puede perder las variables no utilizadas. Intente este proyecto:

program TestCompilerProblems; 

procedure Proc; 
var 
    a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, 
    a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, 
    a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, 
    a31, a32, a33, a34, a35, a36, a37, a38, a39, a40: Integer; 
begin 
end; 

begin 
    Proc; 
end. 

Causaría 31 sugerencias, no 40.

Cuestiones relacionadas