Articles of c99

¿Cuál es el tipo correcto para los índices de matriz en C?

¿Qué tipo de índice de matriz en C99 debería usarse? Tiene que funcionar en LP32, ILP32, ILP64, LP64, LLP64 y más. No tiene que ser un tipo C89. He encontrado 5 candidatos: size_t ptrdiff_t intptr_t / uintptr_t int_fast*_t / uint_fast*_t int_least*_t / uint_least*_t Hay un código simple para ilustrar mejor el problema. ¿Cuál es el […]

¿Hay alguna razón para no usar tipos enteros de ancho fijo (por ejemplo, uint8_t)?

Suponiendo que está utilizando un comstackdor que admita C99 (o incluso solo stdint.h), ¿hay alguna razón para no usar tipos enteros de ancho fijo como uint8_t? Una razón de la que soy consciente es que tiene mucho más sentido usar char cuando se trata de caracteres en lugar de usar (u)int8_t s, como se menciona […]

Crear un binario estáticamente enlazado que use getaddrinfo?

He incluido el encabezado netdb.h , donde se incluye getaddrinfo , pero gcc emite esta advertencia: warning: Using ‘getaddrinfo’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking gcc -m32 -static -s -O2 -std=c99 -D_POSIX_C_SOURCE=200112L myprogram.c ¿Cómo puedo comstackr estáticamente el archivo que falta? Soluciones posibles: Podría […]

¿Cuál es el modo C predeterminado para el gcc actual (especialmente en Ubuntu)?

Cuando solicito ver la versión actual de cc, obtengo esto. $ cc –version cc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ Lo que me gustaría saber es […]

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 […]