Página 1 de 1

Declarar atribuindo valor

Enviado: 09 Jul 2025 13:46
por JoséQuintas
Tava aqui mexendo com fonte de terceiros e peguei isso.

Código: Selecionar todos

LOCAL A := B := C := D := 0
Isso declara apenas A como LOCAL.
Os demais já são operação de atribuição, e serão variáveis PRIVATE.
d:\temp>copy con x.prg
PROCEDURE Main

LOCAL A := B := C := D := E := 0

RETURN
^Z
1 arquivo(s) copiado(s).

d:\temp>hbmk2 x -w3 -es2


hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
Harbour 3.2.0dev (r2503251254)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'x.prg'...

x.prg:3: warning W0001 Ambiguous reference 'E'

x.prg:3: warning W0001 Ambiguous reference 'D'

x.prg:3: warning W0001 Ambiguous reference 'C'

x.prg:3: warning W0001 Ambiguous reference 'B'

x.prg:6: warning W0032 Variable 'A' is assigned but not used in function '3:MAIN'

No code generated.
O erro compilando com -w3 -es2 é justamente alertando sobre a falta de declaração das outras variáveis

Já o último aviso é normal... declarei a variável A e não usei pra nada, está inútil no fonte, a mensagem é sobre atribuir zero e não usar pra nada.
Mas retirando o 0, vai continuar inútil, declarada e não usada e vai mudar a mensagem de erro.

Declarar atribuindo valor

Enviado: 09 Jul 2025 17:02
por ivanil
Pois é,
Embora não tenha o costume de fazer declarações dessa forma, sempre tive a convicção de que as variáveis eram locais; isso pode até explicar alguns bugs que enfrentei sem entender a causa;

Código: Selecionar todos

memvar a,b,c,d,e

Function Main( )
    Local a:=b:=c:=d:=e:=0
    test2()
    ?a,b,c,d,e //=> 0 2 3 4 5
    wait
    REturn .T.
    
function test2()
    a:=1
    b:=2
    c:=3
    d:=4
    e:=5
    return Nil


Declarar atribuindo valor

Enviado: 09 Jul 2025 18:48
por JoséQuintas
Seria o equivalente a:

Código: Selecionar todos

LOCAL a := (  b :=   (  c := ( d := ( e := 0 ) ) ) )
Dessa forma fica visível que não houve declaração de b,c,d,e
Pois é, não parece, mas seguir regras, e às vezes formatar fonte, ajudam muito.
E compilar -w3 -es2 também ajuda muito, muita coisa pode passar sem perceber.

Declarar atribuindo valor

Enviado: 09 Jul 2025 19:27
por alxsts
Olá!

Eu aprendi isso há algumas décadas, ainda no Clipper. Não me lembro se li em algum lugar ou foi troca de conhecimento com algum colega.

Foi bom levantar a questão, pois é algo pouco documentado.