Números simplesmente jogados no código são óbvios apenas para quem cria e normalmente só naquele momento. Então, quando um número for utilizado e não for óbvio o seu significado, é aconselhável utilizar constantes com nomes mais claros.
Entretando, não deve-se criar constantes para expressões complexas. Isto tornará o código muito difícil de compreender e poderá causar erros primários, pois pode-se imaginar que uma atribuição é efetuada a uma variável quando na verdade há toda uma expressão disfarçada:
Exemplo:
#DEFINE NUMLINES aPrintDefs[1]
#DEFINE NUMPAGES aPrintDefs[2]
#DEFINE ISDISK aReturn[5]
If ISDISK == 1
NUMLINES := 55
Endif
NUMPAGES += 1
A impressão que se tem após uma leitura deste código é de que valores estão sendo atribuidos às variáveis ou que constantes estão sendo utilizadas. Se o objetivo é flexibilidade, o código anterior deve ser substituído por:
#DEFINE NUMLINES 1
#DEFINE NUMPAGES 2
#DEFNE ISDISK 5
If aReturn[ISDISK] == 1
aPrintDefs[ NUMLINES ] := 55
Endif
aPrintDefs[ NUMPAGES ] += 1