1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[resolvido] podem fechar

Discussão em 'Programação' iniciada por Fito, 18 de Dezembro de 2008. (Respostas: 13; Visualizações: 565)

  1. Fito

    Fito Power Member

    Pessoal, tenho aqui um programa em C++ que tem isto:

    "#pragma once"

    Alguém me sabe dizer o que faz e como se pode contornar (métodos alternativos)?
     
    Última edição: 18 de Dezembro de 2008
  2. Fito

    Fito Power Member

    Lol obrigado, eu já tinha ido ao Google ;)

    Eu não sei é como é que hei de tirar isto do programa e isto continuar a funcionar...
     
  3. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Eu nunca tinha ouvido falar, sequer... :D
    De qualquer forma, no primeiro link,
    Penso que isto ajude, daí os links. Eu cá ainda não sei nada disso :x
     
  4. Granadafeup

    Granadafeup Power Member

    Usa Include (ou Header) guards. Têm um comportamento idêntico e funciona noutros compiladores / OS.

     
  5. Fito

    Fito Power Member

    Granadafeup agradeço a resposta mas ainda estou com o mesmo problema.

    Eu tenho a directiva #pragma once no programa, mas não a quero lá e tenho que a tirar. O problema é que se a tirar o programa fica com vários erros... O ideal era chegar lá, fazer delete e pronto...

    edit:

    Estive a pesquisar e vi isto:

    "This can reduce build times as the compiler will not open and read the file after the first #include of the module."

    Basicamente o #pragma once serve para me poupar tempo... Vamos ver se consigo descobrir como tirar isto :\
     
    Última edição: 18 de Dezembro de 2008
  6. Granadafeup

    Granadafeup Power Member

    Mas qual é o problema que encontras por causa do pragma once?

    É que tanto o #pragma once e o Guard são usados para o teu compilador não compilar esse ficheiro mais de que uma vez, tal como tu encontras-t.

    Isto geralmente é usado tanto por medidas de performance, como de segurança (por exemplo, se o compilador volta a compilar um .h com a declaração de uma classe, vai estourar)
     
  7. Fito

    Fito Power Member

    O meu problema é que não posso utilizar o pragma mesmo, basicamente o programa está bom de mais... E agora não o sei tirar.

    Eu sei que é benéfico pois o programa fica mais rapido, mas não o posso incluir...

    Acho que o problema de quando o tiro é o que tu disseste:

    "se o compilador volta a compilar um .h com a declaração de uma classe, vai estourar" e eu não estou a conseguir resolver isto.
     
  8. Granadafeup

    Granadafeup Power Member

    Isso geralmente acontece quando usas vários ficheiros que chamam o mesmo ficheiro.h. Mas depende um bocado de projecto para projecto.
     
  9. Fito

    Fito Power Member

    Ok, já descobri uma boa alternativa.

    O uso do

    #ifndef xxxxx
    #define xxxxx
    ....
    #endif

    Agora só não sei é o que é que tenho que escrever no lugar do xxxxx
     
  10. sapropel

    sapropel Power Member

    normalmente cada uma mete como prefere (não é muito bem mas pronto)..
    eu normalmente é caps e underscores com o nome do ficheiro, do genero:
    filename: teste.h
    #ifndef TESTE_H
    #define TESTE_H

    (...)

    #endif

    o #pragma once faz exactamente isso mas é especifico do vc++
    convem perceber o q isso faz, especificas que se TESTE_H n tiver definido, então que o defina e "leia" o resto do ficheiro, se for a ser chamado o teste.h outra vez (pk foi incluido posteriormente por exemplo) o TESTE_H já está definido e assim não processa o resto do ficheiro outra vez.

    senão era uma data de redefinition errors (que é o que deve ter aparecido quando apagaste o pragma).
     
    Última edição: 18 de Dezembro de 2008
  11. Fito

    Fito Power Member

    Problem fixed! :001::001::001:

    Prémio Nobel da Humanidade para sapropel JÁAA! :-D

    Muito obrigado a todos os que tentaram ajudar :)
     
  12. Granadafeup

    Granadafeup Power Member

    Epá eu já vi isto em algum lado .....:002:
     
  13. Fito

    Fito Power Member

Partilhar esta Página