Stack Overflow em Português Asked by user72726 on November 10, 2021
Já li em vários livros que em C as variáveis devem ser declaradas no início de um bloco de código. Mas o que acontece se eu as declarar no meio?
Estava fazendo um programa em c que mostra um texto numa janela criada somente usando a biblioteca do X11. Tinha uma função – split(...)
-, que inexplicavelmente, cada vez eu a usava, o texto aparecia com cores aleatórias. Daí decide mover todas as variáveis do programa para o início de cada bloco. E o problema desapareceu.
Então em C, declarar as variáveis no meio dos blocos de código, podem levar o programa a um comportamento indefinido?
Mas, não tenho a toda a certeza que esta era a causa do meu problema. Link para pergunta sobre o meu problema.
Esses livros são antigos ou muito ruins. Tem muito material que repete receitas de bolo sem entender o porquê daquilo, e acabam falando besteira.
Declarar variáveis mais perto de onde são usadas é o melhor que se pode fazer.
No passado os compiladores não permitiam fazer isso, complicava a vida deles. Alguns ainda não permitem, mas corra deles.
Também se costumava fazer funções muito grandes o que poderia se perder no que estava fazendo, mas este argumento ainda é frágil.
A solução do seu problema foi coincidente. Talvez porque as variáveis estavam declaradas nos lugares errados. Ou está usando um compilador absurdamente ruim, mas duvido que exista uma atrocidade dessas. Soluções por coincidência não são boas. Se a solução foi tirar as variáveis da função, aí causou mais problema ainda, o fato de não vê-los não significa que não esteja lá.
Não é que haverá comportamento indefinido, é que se declarar onde não deve pode mudar o algoritmo.
Não podemos ajudar muito porque nem sabemos do que se trata. Uma função que não faz nada e causa efeitos colaterais é só olhar para o problema errado, é impossível acontecer isto.
O que é comportamento indefinido, não especificado e definido pela implementação?
Answered by Maniero on November 10, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP