Articles of c99

Declaraciones de variables C después del encabezado de la función en la definición

Al leer algún código fuente de FreeBSD (Ver: radix.h líneas 158-173), encontré declaraciones de variables que seguían el “encabezado de la función” en la definición. ¿Es esto válido en ISO C (C99)? ¿Cuándo debería hacerse esto en el código de producción en lugar de simplemente declarar las variables dentro del “encabezado de la función”? ¿Por […]

¿Cómo usar literales compuestos para `fprintf ()` números formateados múltiples con bases arbitrarias?

Me gustaría convertir varios números en una representación y luego utilizar los indicadores, el ancho y la precisión de *printf() especificadores. La preferencia sería evitar los búferes globales o static . El problema clave parece ser ¿cómo proporcionar un char[] para cada uno de los números convertidos? fprintf(ostream, “some_format”, foo(int_a, base_x), foo(int_b, base_y), …); ¿Cómo […]

¿Microsoft Visual Studio 2010 es compatible con c99?

Me gustaría saber si Microsoft Visual Studio 2010 es compatible con C99. Si no, ¿cómo puedo usar los tipos estándar como intptr_t y uintptr_t ?

¿Unión anónima dentro de struct no en c99?

Aquí hay un código de problema muy simplificado que tengo: enum node_type { t_int, t_double }; struct int_node { valor int; }; struct double_node { doble valor; }; struct node { enum tipo_nodo; Unión { struct int_node int_n; struct double_node double_n; }; }; int main (void) { struct int_node i; i.value = 10; estructura nodo […]

¿Por qué estaba mezclando declaraciones y códigos prohibidos hasta C99?

Recientemente me convertí en asistente de profesor de un curso universitario que enseña principalmente C. El curso se estandarizó en C90, principalmente debido al amplio respaldo del comstackdor. Uno de los conceptos muy confusos para los novatos C con experiencia previa en Java es la regla de que las declaraciones de variables y el código […]

c99 pasó a la inicialización

Al depurar un locking, encontré este problema en algún código: int func() { char *p1 = malloc(…); if (p1 == NULL) goto err_exit; char *p2 = malloc(…); if (p2 == NULL) goto err_exit; … err_exit: free(p2); free(p1); return -1; } El problema ocurre cuando falla el primer malloc. Debido a que saltamos la inicialización de […]

En C99, ¿es f () + g () indefinido o simplemente no especificado?

Solía ​​pensar que en C99, incluso si los efectos secundarios de las funciones f y g interferían, y aunque la expresión f() + g() no contiene un punto de secuencia, f y g contendrían algo, por lo que el comportamiento sería no especificado: o f () se llamaría antes de g (), o g () […]

¿Por qué hay dígrafos en C y C ++?

Aprendí hoy que hay dígrafos en C99 y C ++. El siguiente es un progtwig válido: %:include %:ifndef BUFSIZE %:define BUFSIZE 512 %:endif void copy(char d, const char s, int len) = 0) <% d = s; %> %> Mi pregunta es: ¿por qué existen?

Inicializador de cadena literal para una matriz de caracteres

En las siguientes reglas para el caso cuando la matriz se descompone en puntero: Un lvalue [ver pregunta 2.5] de tipo array-of-T que aparece en una expresión decae (con tres excepciones) en un puntero a su primer elemento; el tipo del puntero resultante es puntero-a-T. (Las excepciones son cuando la matriz es el operando de […]

¿Qué características de C99 están disponibles en el comstackdor de MS Visual Studio?

Es bien sabido que el comstackdor de Visual Studio de Microsoft no es compatible con C99, y parece que no tienen planes para respaldarlo . Sin embargo, el comstackdor incluye algunas características escogidas con precisión, como macros variadas y long long , vea las comillas en esta respuesta : Donde hemos recibido muchas solicitudes de […]