Como resolver este erro compilando com -w3

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como resolver este erro compilando com -w3

Mensagem por JoséQuintas »

Comecei a ajustar os fontes pra compilar com -w3.
No caso desta rotina, não sei como resolver. Poderiam ajudar?
Obs. não é bug, é só o aviso compilando com -w3

Compiling 'ZE_XHARB.prg'...
ZE_XHARB.prg(172) Warning W0032 Variable 'NTBCOLEND' is assigned but not used in function 'MBRZMOVE
(130)'

Código: Selecionar todos

FUNCTION MBrzMove(oTb,nMRow,nMCol,nTop,nLeft,nBottom,nRight)
   LOCAL nTbCol, nTbColEnd, nTbRow
   LOCAL lHandled := .f.
   oTb:refreshall()
   DO WHILE !oTb:stabilize()
   ENDDO

   IF nTop==NIL .OR. nLeft==NIL .OR. nBottom==NIL .OR. nRight==NIL
      nTop    := MBRZFDATA(oTb)
      nBottom := MBRZLDATA(oTb)
      nLeft   := oTb:nLeft
      nRight  := oTb:nRight
   ENDIF
   nTbCol    := COL()
   nTbColEnd := nTbCol+oTb:colwidth(oTb:colpos)-1
   nTbRow    := ROW()

   IF nMRow>=nTop .AND. nMRow<=nBottom .AND. nMCol>=nLeft .AND. nMCol<=nRight
      IF nMCol < nTbCol
         lHandled := .t.
         DO WHILE nMCol < nTbCol .AND. oTb:colpos > oTb:leftvisible-oTb:freeze
            oTb:left()
            DO WHILE !oTb:stabilize()
            ENDDO
            nTbCol    := COL()
            nTbColEnd := nTbCol+oTb:colwidth(oTb:colpos)-1
         ENDDO

      ELSEIF nMCol > nTbColEnd
         lHandled := .t.
         DO WHILE nMCol > nTbCol .AND. nMCol > nTbColend .AND. oTb:colpos < oTb:rightvisible
            oTb:right()
            DO WHILE !oTb:stabilize()
            ENDDO
            nTbCol    := COL()
            nTbColEnd := nTbCol+oTb:colwidth(oTb:colpos)-1
         ENDDO
      ENDIF

      IF nMRow < nTbRow
         lHandled := .t.
         DO WHILE nTbRow > nMRow
           oTb:up()
           nTbRow--
         ENDDO
      ELSEIF nMRow > nTbRow
         lHandled := .t.
         DO WHILE nTbRow < nMRow
            oTb:down()
            nTbRow++
         ENDDO
      ENDIF
   ENDIF
   IF lHandled
      DO WHILE !oTb:stabilize()
      ENDDO
   ENDIF
RETURN lHandled
José M. C. Quintas
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Como resolver este erro compilando com -w3

Mensagem por Imatech »

Simplesmente:

Se declarar 1 variavel: alem de lhe atribuir algum valor, precisa usa-la no processamento...

Código: Selecionar todos

FUNCTION MBrzMove( oTb, nMRow, nMCol, nTop, nLeft, nBottom, nRight )
   LOCAL nTbCol
   LOCAL nTbColEnd
   LOCAL nTbRow
   LOCAL lHandled := .F.

   oTb:refreshall()

   WHILE !( oTb:stabilize() )
   ENDDO

   IF ( nTop == NIL ) .OR. ( nLeft == NIL ) .OR. ( nBottom == NIL ) .OR. ( nRight == NIL )
      nTop    := MBRZFDATA( oTb )
      nBottom := MBRZLDATA( oTb )
      nLeft   := oTb:nLeft
      nRight  := oTb:nRight
   ENDIF

   nTbCol    := Col()
   nTbRow    := Row()

   IF ( nMRow >= nTop ) .AND. ( nMRow <= nBottom ) .AND. ( nMCol >= nLeft ) .AND. ( nMCol <= nRight )

      IF nMCol < nTbCol

         lHandled := .T.
         DO WHILE nMCol < nTbCol .AND. oTb:colpos > oTb:leftvisible - oTb:freeze
            oTb:Left()
            DO WHILE !oTb:stabilize()
            ENDDO
            nTbCol  := Col()
         ENDDO

      ELSE

         nTbColend := ( nTbCol + oTb:colwidth( oTb:colpos ) - 1 )
         IF nMCol > nTbColend
            lHandled := .T.
            WHILE ( nMCol > nTbCol ) .AND. ( nMCol > nTbColend ) .AND. ( oTb:colpos < oTb:rightvisible )
               oTb:Right()
               DO WHILE !oTb:stabilize()
               ENDDO
               nTbCol  := Col()
            ENDDO
         ENDIF

      ENDIF

      IF nMRow < nTbRow
         lHandled := .T.
         DO WHILE nTbRow > nMRow
            oTb:up()
            nTbRow--
         ENDDO
      ELSEIF nMRow > nTbRow
         lHandled := .T.
         DO WHILE nTbRow < nMRow
            oTb:down()
            nTbRow++
         ENDDO
      ENDIF
   ENDIF

   IF lHandled
      DO WHILE !oTb:stabilize()
      ENDDO
   ENDIF

   RETURN lHandled

M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como resolver este erro compilando com -w3

Mensagem por JoséQuintas »

Com a mudança de formatação, demorei mais um pouco pra ver o real motivo.

A variável estava sendo atribuída e usada na rotina.
Mas a atribuição dentro do primeiro do while não servia pra nada e a linha pode ser removida.

Caracas, que checagem!!! Permitiu reduzir código.

Só resta saber o que seria mais comum pra variáveis public e private.
Ficar colocando memvar pra isso é tão chato, que parece até ser errado usar, principalmente se pensar em multithread.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Como resolver este erro compilando com -w3

Mensagem por sygecom »

JoséQuintas escreveu: Só resta saber o que seria mais comum pra variáveis public e private.
Ficar colocando memvar pra isso é tão chato, que parece até ser errado usar, principalmente se pensar em multithread.
Acho que o certo é nem usar, quando precisar usar, deve se criar uma classe que retorne os valores dessas variáveis que iria ser publicas ou private.
Outra coisa interessante que você pode fazer isso por .PRG apenas acrescentando no inicio do .PRG as seguintes linhas:

#pragma /w2
#pragma /es2

Nota: Nesse caso é como se fosse: -W2
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como resolver este erro compilando com -w3

Mensagem por JoséQuintas »

Essa dica por PRG é uma mão na roda.
Só a de classes pra variáveis públicas, pra multithread é que precisa algo mais.

Tenho substituído minhas variáveis públicas por uma classe sistema.
Em multithread, a classe vai ter valores diferentes.
Se criar um array estático ajuda, mas ainda vou ter a classe diferente.

Talvez exista uma propriedade no DATA da classe que funcione como alias, seria a solução neste caso.
Existe essa opção? Algo parecido com:

Código: Selecionar todos

Static aParametros[100]
Create Class SistemaClass
   Data Usuario alias aParametros[1]
  EndClass
Desta forma, cada módulo poderia ter sua classe sistemaclass, mas os valores seriam os mesmos em todas as threads.

Outra coisa que já vi foi

Static thread var

Isso é pra que o conteúdo seja isolado por thread?
Se for isso, meu wSave()/wRestore(), pra salvar/restaurar telas, seria o primeiro candidato a fazer uso, já que cada thread teria seu conjunto de telas salvas.

No final, as várias threads vão ser até mais úteis pra quem ainda usa DBF como eu.
Abrir janela de clientes e estoque, por exemplo, só multithread pra manter posicionamento de área, registro, índice, etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder