Articles of comportamiento indefinido

¿Por qué funciona esta implementación de strlen ()?

(Descargo de responsabilidad: He visto esta pregunta , y no la estoy volviendo a preguntar; me interesa saber por qué funciona el código y no cómo funciona). Así que aquí está esta implementación de Apple (bueno, FreeBSD) strlen() . Utiliza un truco de optimización bien conocido, es decir, comprueba 4 u 8 bytes a la […]

Comportamiento no especificado, indefinido y definido para implementación WIKI para C

Aunque hay abundantes enlaces sobre este tema en SO, creo que falta algo: una explicación clara en lenguaje sencillo de cuáles son las diferencias entre el comportamiento no especificado (UsB), el comportamiento indefinido (UB) y el comportamiento definido en la implementación (BID ) con una explicación detallada pero fácil de cualquier caso de uso y […]

¿32 bits sin signo se multiplican en 64 bits causando un comportamiento indefinido?

Entonces tengo sobre este código: uint32_t s1 = 0xFFFFFFFFU; uint32_t s2 = 0xFFFFFFFFU; uint32_t v; … v = s1 * s2; /* Only need the low 32 bits of the result */ En todo lo que sigue, supongo que el comstackdor no podría tener ninguna idea preconcebida sobre el rango de s1 o s2 , […]

Mezclando clase y estructura

Soy muy consciente de la diferencia entre clase y estructura , sin embargo, estoy luchando por decir con autoridad si esto está bien definido: // declare foo (struct) struct foo; // define foo (class) class foo { }; // instance of foo, claiming to be a struct again! Well defined? struct foo bar; // mixing […]

¿Es este comportamiento C indefinido?

Nuestro profesor de progtwigción C hizo esta pregunta a la clase: Te dan el código: int x=1; printf(“%d”,++x,x+1); ¿Qué salida producirá siempre? La mayoría de los estudiantes dijo comportamiento indefinido. ¿Alguien puede ayudarme a entender por qué es así? Gracias por la edición y las respuestas, pero todavía estoy confundido.

Es el resultado de printf (“% d% d”, c ++, c); también indefinido?

Recientemente encontré una publicación ¿Cuál es la respuesta correcta para cout << c ++ << c ;? y me preguntaba si la salida de int c = 0; printf (“%d %d”, c++, c); tampoco está definido? He estudiado en conferencias que los operadores de post-corrección y prefijo incrementan el valor solo después de obtener un […]

¿Una implementación en C ++ que detecta un comportamiento indefinido?

Una gran cantidad de operaciones en C ++ resultan en un comportamiento indefinido, donde la especificación es completamente muda sobre cuál debe ser el comportamiento del progtwig y permite que ocurra cualquier cosa. Debido a esto, hay todo tipo de casos en que las personas tienen código que se comstack en modo de depuración pero […]

¿Cómo implementar memmove en C estándar sin una copia intermedia?

Desde la página de manual en mi sistema: void * memmove (void * dst, const void * src, size_t len); DESCRIPCIÓN La función memmove () copia los bytes len de string src a string dst. Las dos cadenas pueden superponerse ; la copia siempre se hace de una forma no destructiva manera. Del estándar C99: […]

¿Cuál es la forma correcta de escribir un testando un flotante en un int y viceversa?

El siguiente código realiza una operación de raíz cuadrada inversa rápida mediante algunos hacks de bits. El algoritmo probablemente fue desarrollado por Silicon Graphics a principios de los 90 y también apareció en Quake 3. más información Sin embargo, recibo la siguiente advertencia del comstackdor C ++ de GCC : desreferenciar puntero tipo-punteado romperá las […]

¿Por qué el comportamiento aritmético del puntero fuera de los límites es indefinido?

El siguiente ejemplo es de Wikipedia . int arr[4] = {0, 1, 2, 3}; int* p = arr + 5; // undefined behavior Si nunca dejo referencia a p, entonces ¿por qué arr + 5 solo comportamiento indefinido? Espero que los punteros se comporten como enteros, con la excepción de que cuando se desreferencia el […]