Articles of c99

Criar binário vinculado estaticamente que usa getaddrinfo?

Eu incluí o header netdb.h , onde getaddrinfo está incluído, mas o gcc emite este aviso: 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 Como eu posso compilar estaticamente qualquer arquivo que está faltando? Soluções […]

Como usar literais compostos para números múltiplos formatados em fprintf () com bases arbitrárias?

Eu gostaria de converter vários números em alguma representação e, em seguida, usar os sinalizadores, a largura e a precisão dos especificadores *printf() . A preferência seria evitar buffers globais ou static . O problema chave parece ser como fornecer um char[] para cada um dos números convertidos? fprintf(ostream, “some_format”, foo(int_a, base_x), foo(int_b, base_y), …); […]

O Microsoft visual studio 2010 suporta o c99?

Gostaria de saber se o Microsoft Visual Studio 2010 oferece suporte ao C99. Se não, como posso usar os tipos padrão como intptr_t e uintptr_t ?

c99 vai para a boot passada

Ao depurar uma falha, me deparei com esse problema em algum 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; } O problema ocorre quando o primeiro malloc falha. Como saltamos na boot de […]

Como adicionar corretamente escapa hexadecimal em uma string literal?

Quando você tem uma string em C, você pode adicionar o código hexadecimal direto dentro dela. char str[] = “abcde”; // ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, 0x00 char str2[] = “abc\x12\x34”; // ‘a’, ‘b’, ‘c’, 0x12, 0x34, 0x00 Ambos os exemplos têm 6 bytes na memory. Agora o problema existe se você quiser adicionar valor […]

Por que misturar declarações e códigos foi proibido até C99?

Tornei-me recentemente um assistente de ensino para um curso universitário que ensina principalmente C. O curso padronizado no C90, principalmente devido ao amplo suporte ao compilador. Um dos conceitos mais confusos para iniciantes em C com experiência em Java anterior é a regra de que as declarações de variables ​​e o código não podem ser […]

Por que existem digrafos em C e C ++?

Eu aprendi hoje que existem digraphs em C99 e C ++. O seguinte é um programa válido: %:include %:ifndef BUFSIZE %:define BUFSIZE 512 %:endif void copy(char d, const char s, int len) = 0) <% d = s; %> %> Minha pergunta é: por que eles existem?

Inicializador de cadeia literal para uma matriz de caracteres

Nas seguintes regras para o caso quando a matriz decai para ponteiro: Um lvalue [ver pergunta 2.5] do tipo array-de-T que aparece em uma expressão decai (com três exceções) em um ponteiro para seu primeiro elemento; o tipo do ponteiro resultante é ponteiro para T. (As exceções são quando a matriz é o operando de […]

Quais resources do C99 estão disponíveis no compilador do MS Visual Studio?

É bem sabido que o compilador Visual Studio da Microsoft não suporta o C99, e parece que eles não têm planos para suportá-lo . No entanto, o compilador inclui alguns resources escolhidos, como macros variadic e long long – veja as aspas nesta resposta : Onde recebemos muitas solicitações para determinados resources do C99, tentamos […]

O C99 garante que as matrizes são contíguas?

Seguindo um tópico de comentário quente em outra questão, eu vim debater sobre o que é e o que não é definido no padrão C99 sobre arrays C. Basicamente, quando eu defino um array 2D como int a[5][5] , o padrão C99 garante ou não que seja um bloco contíguo de ints, eu posso lançá-lo […]