Antecedentes¿Pueden los paréntesis en C provocar una conversión implícita?
La última vez que se le preguntó si estaban causando paréntesis conversión implícita (here), @pmg era lo suficientemente bueno como para señalar que "nada en C se realiza a continuación int" Pero allí, la discusión estaba a punto operadores bit a bit, y el paréntesis resultó ser solo una distracción.
Introducción
A continuación, los paréntesis son el principal atractivo. O, para ser más aburrido pero preciso, los únicos operadores que veo son los paréntesis y los operadores de asignación.
At this reference about the C parentheses operator, no veo nada sobre paréntesis que cambien el tipo (fuera de la sintaxis de tipo de letra, que no es este caso).
Mientras tanto, here's a reference that reminds that there is automatic type conversion on assignment, pero no creo que eso explique el comportamiento de la herramienta de análisis estático que describiré aquí.
Como en mi anterior pregunta, "OK" significa que la herramienta de análisis estático hizo no advierten acerca de un conversión implícita, y "NO OK" significa que lo hizo.
int main(void)
{
unsigned int ui;
int i;
ui = (256U); // NOT OK (*) (1)
i = (256U); // NOT OK (*) (2)
i = 256; // OK
i = 256U; // NOT OK
ui = 256U; // OK (3)
ui = 256; // NOT OK
return(0);
}
Puedo entenderlos todos excepto los dos primeros - ¿qué hacen los paréntesis? Si no hacen nada en la forma de encasillamiento implícito, entonces esperaría que (1) estuviera bien y (2) que NO estuviera bien. Si realizan una promoción de tipo automática de tipos menores que int hasta int, entonces esperaría que (1) NO ESTÉ BIEN y (2) que esté bien. Pero esta herramienta dice que ambos NO ESTÁN BIEN.
¿Es este un error de la herramienta de análisis estático, o es la herramienta correcta y hay algo más que necesito aprender sobre las conversiones de tipo implícito en C?
(Por cierto espero que el valor 256 es suficientemente pequeña para no ser la causa de desbordamiento en mi máquina ...)
Su herramienta analyzis estática es probable mal. ¿Qué herramienta estás usando y cuáles son los errores que te dice? – nos
Las garantías estándar C que el valor de 256 no se desbordará, no en la aritmética, no en el preprocesador - a menos que se asigna a un 'char' de algún tipo. –