Ir para conteúdo
Fórum Script Brasil
  • 0

While


s3c

Pergunta

Posts Recomendados

  • 0
Quanto essa última procedure algo, você está chamando ela em algum lugar ? porque se não chamar ele não gera código mesmo.
Mesmo se chamar não gera código, porque não há nada a fazer.

Bom creio que o caso esteja resolvido, né? Quando se coloca While True o compilador identifica e coloca um Jump incondicional(jmp) sem fazer teste nenhum, e quando há uma condição usa-se cmp para fazer a comparação e um jump condicional(jl, jnl, jg, ..........).

Link para o comentário
Compartilhar em outros sites

  • 0
Outra coisa, se ele sabe que está em loop infinito, porque não é dada ao menos uma msg de warning ?
s3c, Está aí uma boa pergunta! Ele realmente poderia. Mas o fato de permitir este tipo de construção (loop infinito), talvez tornasse complexo o processo para esta avaliação já que a implementação que se encontra no "recheio" poderia "dar um nó" no compilador. Talvez apenas avisar da possibilidade de que ocorra, mas sem garantias.

Help do Delphi:
A while statement is similar to a repeat statement, except that the control condition is evaluated before the first execution of the statement sequence. Hence, if the condition is false, the statement sequence is never executed.

The syntax of a while statement is

while expression do statement

where expression returns a Boolean value and statement can be a compound statement. The while statement executes its constituent statement repeatedly, testing expression before each iteration. As long as expression returns True, execution continues.

Então: While true do; para mim true seria o retorno booleano da avaliação de uma expressão que neste caso não existe.

s3c acho que todo o "problema" na verdade é gerado por uma questão de interpretação. Seja nossa ou de quem compôs o help. Isto porquê as constantes são tratadas como expressões. Vejamos alguns fragmentos do arquivo de ajuda:

Tópico: Boolean types

[...]Boolean values are denoted by the predefined constants True and False.[...]

Assim entendemos que True e False são processadas pelo compilador como contantes.

Tópico: True constants (aqui não é sobre a constante TRUE e sim "constantes de verdade")

[...]The syntax for declaring a true constant is

const identifier = constantExpression

where identifier is any valid identifier and constantExpression is an expression that the compiler can evaluate without executing your program. (see constant expression - abaixo)[...]

Tópico: Constant Expressions

A constant expression is an expression that the compiler can evaluate without executing the program in which it occurs. Constant expressions include numerals; character strings; true constants; values of enumerated types; the special constants True, False, and nil; and expressions built exclusively from these elements with operators, typecasts, and set constructors.[...]

Quanto essa última procedure algo, você está chamando ela em algum lugar ? porque se não chamar ele não gera código mesmo.
Mesmo se chamar não gera código, porque não há nada a fazer.

Bom creio que o caso esteja resolvido, né?

Thales, agora que eu ia participar. :D

Quando se coloca While True o compilador identifica e coloca um Jump incondicional(jmp) sem fazer teste nenhum, e quando há uma condição usa-se cmp para fazer a comparação e um jump condicional(jl, jnl, jg, ..........).
Mas daí eu já acho que é uma questão de otimização do compilador.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...