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: 1234
- 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: 7135
- 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: 1234
- 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: 20420
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
