TransWikia.com

Em C, declarar variáveis no meio de um bloco de código podem levar o programa à um comportamento indefinido?

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.

One Answer

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?

Fiat 147 detonado circulando pelas ruas

Answered by Maniero on November 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP