A menudo se hacen suposiciones sobre una plataforma en particular en la que se está codificando, por ejemplo, que los enteros con signo utilizan el complemento de almacenamiento en dos, o que (0xFFFFFFFF == -1)
, o cosas de esa naturaleza.¿Hay alguna herramienta para C++ que compruebe el comportamiento común no especificado?
¿Existe una herramienta que pueda verificar una base de código para las violaciones más comunes de este tipo de cosas (para aquellos de nosotros que queremos un código portable pero no tenemos máquinas extrañas que no sean dos)?
(Mis ejemplos anteriores son específicos de enteros con signo, pero estoy interesado en otros errores (como la alineación o el orden de bytes) así)
Solo un punto de terminología: las cosas de las que habla están definidas por la implementación, no están definidas.Alineación, orden de bytes, representación de entero con signo ... todos estos aspectos están definidos por la implementación y especificados como tales dentro del estándar. –
@up, cierto. Sin embargo, el OP menciona 'no especificado' no 'indefinido', que aparentemente es diferente. No estoy seguro de cuál es aplicable aquí. - http://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior – Kos
@Noah Roberts: Ver '1.3.25': ** comportamiento no especificado ** comportamiento, por un bien formado programa construir y corregir los datos, que depende de la implementación (al menos de acuerdo con el C++ 0x FCD) –