(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 […]
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 […]
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 , […]
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 […]
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.
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 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 […]
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: […]
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 […]
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 […]