De Outros

Aviso do Mac: sugira parênteses em torno da atribuição usada como valor verdadeiro

R

rublesaha

Pôster original
22 de dezembro de 2008
  • 8 de janeiro de 2009
Oi
Estou usando este trecho de código

void * handle_;

if (handle_ = dlopen ('/ System / Library / Frameworks / DiskArbitration.Framework / Versions / A / DiskArbitration', RTLD_NOW))
{
printf ('............');

}
else if (handle_ = dlopen ('/ System / Library / PrivateFrameworks / DiskArbitration.Framework / Versions / A / DiskArbitration', RTLD_NOW))
{
printf ('.................');
}

Mas estou recebendo o aviso:
'sugira parênteses em torno da atribuição usada como valor verdade' para a primeira linha i, e o for 'para' loop .... alguém pode me ajudar a me livrar deste aviso .. PARA

kpua

25 de julho de 2006


  • 8 de janeiro de 2009
Em primeiro lugar, geralmente é uma má forma ter efeitos colaterais em instruções if ().

No entanto, às vezes é a maneira mais simples de codificar o que você quer dizer (embora eu não ache que esteja necessariamente em seu exemplo). Quando você tem uma atribuição em uma instrução if, o GCC geralmente espera algo assim:

Código: if ( (foo = bar()) != NULL )
Observe os parênteses extras ao redor da atribuição. O GCC sugere que você use parênteses para evitar o seguinte erro:

Código: if ( foo = bar() != NULL )
que não verifica se o valor atribuído a foo é igual a NULL, mas sim atribui o valor booleano (bar ()! = NULL) a foo.

Também é comum e geralmente mais claro ter a verificação booleana explícita lá, então é por isso que o GCC espera isso. S

Sander

para
24 de abril de 2008
  • 9 de janeiro de 2009
É também porque a declaração

Código: if (a = b) {...}
está correto C (atribua b para a e verifique se não é zero), mas na maioria das vezes as pessoas realmente quiseram

Código: if (a == b) {...}
Como a atribuição dentro de if () é a exceção, o GCC emite um aviso sobre isso. Também para futuros leitores de seu código, os parênteses extras indicam 'sim, eu realmente quero dizer atribuição aqui'.