Compilação harbour
Moderador: Moderadores
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
Compilação harbour
Olá pessoal,
há pouco tempo passei a utilizar o harbour em meus projetos, fazendo a migração.
Com relação a Minigui, antes utilizada em conjunto com o xharbour, foi tranquilo.
Recentemente passei a testar a hbqt em face da promessa de multiplataforma.
Estou gostando do resultado, haja vista o controle total dos objetos criados.
Todavia, os testes indicam a utilização da switch w3, ou seja, nível de aviso 3.
Nesse contexto, tive problema de compilação.
Ao que parece, com o switch w3, embora referindo-se a aviso, a compilação não é executada.
Pela internet, ví que o procedimento abaixo encontra-se errado:
http://hmgforum.com/viewtopic.php?f=5&t=1756
procedure main()
local x:=''
if verdade
x:='teste'
endif
return
Devendo ser:
procedure main()
local x:=''
if verdade
x+='teste'
endif
return
Fazer o quê né...
Ontem (nem vou dizer a data), aconteceu o seguinte:
Prg1
procedure main()
local x
x:=functionprg2()
return
Prg2
function functionprg2()
return 'teste'
Deu erro de "ambiguous reference".
A mesma coisa acontece se eu declarar x como privante no primeiro prg e definir o seu valor no segundo.
Então, para processar a compilação, tive que passar o switch de aviso para 0, ou seja, w0.
Isso pode prejudicar o funcionamento do sistema em tempo de execução?
Desde já obrigado.
MarceloG
há pouco tempo passei a utilizar o harbour em meus projetos, fazendo a migração.
Com relação a Minigui, antes utilizada em conjunto com o xharbour, foi tranquilo.
Recentemente passei a testar a hbqt em face da promessa de multiplataforma.
Estou gostando do resultado, haja vista o controle total dos objetos criados.
Todavia, os testes indicam a utilização da switch w3, ou seja, nível de aviso 3.
Nesse contexto, tive problema de compilação.
Ao que parece, com o switch w3, embora referindo-se a aviso, a compilação não é executada.
Pela internet, ví que o procedimento abaixo encontra-se errado:
http://hmgforum.com/viewtopic.php?f=5&t=1756
procedure main()
local x:=''
if verdade
x:='teste'
endif
return
Devendo ser:
procedure main()
local x:=''
if verdade
x+='teste'
endif
return
Fazer o quê né...
Ontem (nem vou dizer a data), aconteceu o seguinte:
Prg1
procedure main()
local x
x:=functionprg2()
return
Prg2
function functionprg2()
return 'teste'
Deu erro de "ambiguous reference".
A mesma coisa acontece se eu declarar x como privante no primeiro prg e definir o seu valor no segundo.
Então, para processar a compilação, tive que passar o switch de aviso para 0, ou seja, w0.
Isso pode prejudicar o funcionamento do sistema em tempo de execução?
Desde já obrigado.
MarceloG
Água mole em pedra dura tanto bate que até espirra!
Compilação harbour
Marcelo,
Nos testes que eu fiz aqui a coisa funciona assim:
Primeiro você declara a variável sem inicializar:
private x
ou
local x
Depois inicializa a variável:
x:=""
Nos testes que eu fiz aqui a coisa funciona assim:
Primeiro você declara a variável sem inicializar:
private x
ou
local x
Depois inicializa a variável:
x:=""
Código: Selecionar todos
procedure main()
local x'
if verdade
x:='teste'
endif
return
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Compilação harbour
Marcelo,
Corrigindo:
Para não dá o warning ambiguous reference fiz assim:
exemplo:
private x
memvar->x:=""
ou
public x
memvar->x:=""
Teste()
function teste
memvar x
x:="abc"
return nil
[]´s
Corrigindo:
Para não dá o warning ambiguous reference fiz assim:
exemplo:
private x
memvar->x:=""
ou
public x
memvar->x:=""
Teste()
function teste
memvar x
x:="abc"
return nil
[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Compilação harbour
Marcelo,
Tem mais,
usando assim também:
ou
Segundo a documentação do (x)harbour o memvar declara PRIVATE ou PUBLIC variáveis
exemplo da documentação:
Tem mais,
usando assim também:
Código: Selecionar todos
memvar x
function main
x:="teste"
return Nil
Código: Selecionar todos
function main
memvar x
local y:=""
x:=""
return nil
exemplo da documentação:
Código: Selecionar todos
// The example demonstrates the difference of a declared and
// undeclared memory variable of PRIVATE scope.
MEMVAR myVar
PROCEDURE Main
x := "myVar" // compiler warning
myVar := "Hello World" // no compiler warning
? x
? &x
RETURN
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
Compilação harbour
Olá pessoal,
obrigado "asimoes" por resolver o problema.
Com base na sua dica pesquisei e verifiquei que as variáveis public e private devem ser declaradas MEMVAR nos prg´s em que são utilizadas.
Ao que parece a situação é necessária para o compilador não tentar resolver os conflitos verificados quando da compilação, já que o valor somente será efetivamente conhecido quando da execução.
Também verifiquei que a opçao -w3 informa ao compilador para admitir como um erro qualquer aviso e não gerar o executável.
É interessante a situação verificada, porque utilizando o xharbour não tive qualquer problema dessa natureza.
Ou melhor, não recebi nenhum aviso dessa natureza.
Todavia, ao que parece, o procedimento é correto e ajuda o programador a "não errar".
Obrigado a todos.
MarceloG
obrigado "asimoes" por resolver o problema.
Com base na sua dica pesquisei e verifiquei que as variáveis public e private devem ser declaradas MEMVAR nos prg´s em que são utilizadas.
Ao que parece a situação é necessária para o compilador não tentar resolver os conflitos verificados quando da compilação, já que o valor somente será efetivamente conhecido quando da execução.
Também verifiquei que a opçao -w3 informa ao compilador para admitir como um erro qualquer aviso e não gerar o executável.
É interessante a situação verificada, porque utilizando o xharbour não tive qualquer problema dessa natureza.
Ou melhor, não recebi nenhum aviso dessa natureza.
Todavia, ao que parece, o procedimento é correto e ajuda o programador a "não errar".
Obrigado a todos.
MarceloG
Água mole em pedra dura tanto bate que até espirra!
-
microvolution
- Usuário Nível 5

- Mensagens: 1231
- Registrado em: 02 Set 2011 22:17
- Contato:
Compilação harbour
então prezado "asimoes"...asimoes escreveu:Para não dá o warning ambiguous reference fiz assim:
estou testando e vi este post e resolvi alterar, gastei do tempo umas 4 horas mudando tudo.
fiz tudo quanto é mudança para testar o -w3 -es2, e, agora estão aparecendo as mensagens de erro:
Código: Selecionar todos
exvd-v30.prg(1234) Warning W0032 Variable 'NTT_REG' is assigned but not used in function 'PDEL_PREST(796)'
exvd-v30.prg(1234) Warning W0032 Variable 'N3' is assigned but not used in function 'PDEL_PREST(796)'
exvd-v30.prg(1234) Warning W0032 Variable 'N4' is assigned but not used in function 'PDEL_PREST(796)'
exvd-v30.prg(1234) Warning W0032 Variable 'NVRMJRS' is assigned but not used in function 'PDEL_PREST(796)'
exvd-v30.prg(1234) Warning W0032 Variable 'NVRDESCONT' is assigned but not used in function 'PDEL_PREST(796)'
exvd-v30.prg(1234) Warning W0032 Variable 'NVR_RECEBI' is assigned but not used in function 'PDEL_PREST(796)'
exvd-v30.prg(1234) Warning W0032 Variable 'NVRTITUTLO' is assigned but not used in function 'PDEL_PREST(796)'
exvd-v30.prg(1234) Warning W0032 Variable 'CDT_INIC' is assigned but not used in function 'PDEL_PREST(943)'
exvd-v30.prg(1695) Warning W0032 Variable 'COPCAO' is assigned but not used in function 'PDEL_VENDA(1265)'
exvd-v30.prg(1695) Warning W0032 Variable 'NTT_REG' is assigned but not used in function 'PDEL_VENDA(1265)'
exvd-v30.prg(1695) Warning W0032 Variable 'N3' is assigned but not used in function 'PDEL_VENDA(1265)'
exvd-v30.prg(1695) Warning W0032 Variable 'N4' is assigned but not used in function 'PDEL_VENDA(1265)'
exvd-v30.prg(1695) Warning W0032 Variable 'COP' is assigned but not used in function 'PDEL_VENDA(1265)'
exvd-v30.prg(1695) Warning W0032 Variable 'LTESTE' is assigned but not used in function 'PDEL_VENDA(1265)'
exvd-v30.prg(1695) Warning W0032 Variable 'CDT_INIC' is assigned but not used in function 'PDEL_VENDA(1373)'
exvd-v30.prg(3145) Warning W0032 Variable 'NUM_CHAVES' is assigned but not used in function 'ABRE_ARQUIVO(3049)'
exvd-v30.prg(3145) Warning W0032 Variable 'I' is assigned but not used in function 'ABRE_ARQUIVO(3049)'Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Compilação harbour
São variaveis declaradas que não estão sendo usadas.
Por exemplo no primeiro erro na FUNCTION PDEL_PRES linha 796 tem uma variável NTT_REG que não usa dentro da FUNCTION, remove ela que deve resolver.
Por exemplo no primeiro erro na FUNCTION PDEL_PRES linha 796 tem uma variável NTT_REG que não usa dentro da FUNCTION, remove ela que deve resolver.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
microvolution
- Usuário Nível 5

- Mensagens: 1231
- Registrado em: 02 Set 2011 22:17
- Contato:
Compilação harbour
também pensava e continuo pensando semelhante...sygecom escreveu:Por exemplo no primeiro erro na FUNCTION PDEL_PRES linha 796 tem uma variável NTT_REG que não usa dentro da FUNCTION, remove ela que deve resolver.
só que se fizer isso, vem a infeliz notícia: AMBIGUOS REFERENCE NTT_REG...
rsrs :%
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Compilação harbour
Pra simplificar essa parte de PUBLIC e PRIVATE declare no início do FONTE, não no início de um módulo.
Código: Selecionar todos
MEMVAR suavariavel
PROCEDURE algo
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/
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/
