2009-04-24 9 views
8

Estoy usando Delphi 2007 con todos los parches y actualizaciones.* A veces * aparece un error al asignar a una constante en Delphi

Tengo un archivo que es utilizado por dos proyectos diferentes. En ese archivo es un procedimiento, que voy a simplificar de la siguiente manera:

procedure MyProcedure; 
const 
    UniqueValue: integer = 0; 
begin 
    //some code 
    Inc(UniqueValue); 
    //some more code 
end; 

El comando

Inc() falla, porque no se puede asignar a una constante. En un proyecto, recibo un error en ese sentido (llamaré a ese proyecto "Exacto"). En el otro proyecto, no recibo ningún error (lo llamaré "falso"). Tampoco recibo ninguna advertencia. No puedo entender por qué el compilador deja pasar este código incorrecto.

Aquí es lo que he intentado en el proyecto Bogus:

1 - Introducir un error obvio, como escribir "slkdjflskdjf" en medio de una línea

Resultado: aparece un error, lo que demuestra que realmente está tratando de compilar este archivo.

2 - Eliminar el .DCU, y reconstruir el proyecto

Resultado: El .DCU se re-genera, una vez más demostrando que el proyecto es realmente compilando el código erróneo.

¿Alguien tiene alguna idea de por qué ocurriría este comportamiento? Y más específicamente, ¿por qué ocurriría en un proyecto pero no en otro? ¿Hay alguna opción de compilador oscura para permitir la asignación a constantes?

Una última nota: ambos proyectos se convierten de Delphi 5. En Delphi 5 con código similar, ambos compilan bien.

Edit: Gracias por toda su ayuda. Después de cambiar la directiva de constantes mecanografiadas asignables, puedo obtener un comportamiento uniforme en ambos proyectos. Aprendí algo nuevo hoy ...

Respuesta

13

Hay una opción para esto llamada "Constantes tipeadas asignables" en Opciones del compilador. También se puede habilitar con "{$ J +}" en tu código.

5

¿Podría ser que esos proyectos difieran en la configuración de la directiva del compilador $ J?

3

Como otros han dicho, es casi seguro que es la directiva {$J+}.

Si tiene una herramienta diff, puede comparar los archivos del proyecto para ver cómo difieren (son solo archivos de texto) para resolver problemas similares en el futuro.

3

Le sugiero que compruebe las opciones del proyecto, la sección compilador y vea si puede detectar las diferencias. Tal vez tenga la opción Constantes escritas asignables activadas en el proyecto Bogus.

Cuestiones relacionadas