Articles of c99

É possível iterar sobre argumentos em macros variadicas?

Eu queria saber se é possível iterar sobre argumentos passados ​​para uma macro variadic em C99 ou usando qualquer extensão GCC? Por exemplo, é possível escrever uma macro genérica que usa uma estrutura e seus campos como argumentos e imprime o deslocamento de cada campo dentro da estrutura? Algo assim: struct a { int a; […]

Por que o C ++ 11 não suporta listas de inicializadores designadas como C99?

Considerar: struct Person { int height; int weight; int age; }; int main() { Person p { .age = 18 }; } O código acima é legal em C99, mas não é legal em C ++ 11. Qual é a razão pela qual o C ++ 11 não suporta um recurso tão prático?

Definições provisórias em C99 e vinculação

Considere o programa C composto de dois arquivos, f1.c: int x; f2.c: int x=2; Minha leitura do parágrafo 6.9.2 da norma C99 é que esse programa deve ser rejeitado. Na minha interpretação de 6.9.2, a variável x é provisoriamente definida em f1.c , mas essa definição provisória se torna uma definição real no final da […]

Passando uma matriz de comprimento variável multidimensional para uma function

Há toneladas de perguntas semelhantes, mas ainda não consegui encontrar nenhuma resposta relevante para o recurso de matrizes de comprimento variável em C99 / C11. Como passar array de comprimento variável multidimensional para uma function em C99 / C11? Por exemplo: void foo(int n, int arr[][]) // <– error here, how to fix? { } […]

Os protótipos são necessários para todas as funções em C89, C90 ou C99?

Para ser verdadeiramente compatível com os padrões, todas as funções em C (exceto a principal) devem ter um protótipo, mesmo que sejam usadas somente após sua definição na mesma unidade de tradução?

A linha stdout é armazenada em buffer, sem buffer ou indeterminada por padrão?

Seção 7.9.13/7 de c99 afirma que: Na boot do programa, três streams de texto são predefinidos e não precisam ser abertos explicitamente – input padrão (para leitura de input convencional), saída padrão (para gravação de saída convencional) e erro padrão (para gravação de saída de diagnóstico). Como inicialmente aberto, o stream de erro padrão não […]

Cabeçalho C99 stdint.h e MS Visual Studio

Para minha surpresa, acabei de descobrir que o stdint.h C99 está ausente do MS Visual Studio 2003 para cima. Tenho certeza de que eles têm suas razões, mas alguém sabe onde eu posso baixar uma cópia? Sem esse header, não tenho definições para tipos úteis, como uint32_t etc.

Suporte Visual Studio para novos padrões C / C ++?

Eu continuo lendo sobre C99 e C ++ 11 e todas essas coisas totalmente doces que estão sendo adicionadas ao padrão de linguagem que pode ser bom de usar algum dia. No entanto, atualmente definhamos no terreno de escrever C ++ no Visual Studio. Alguma novidade do padrão será adicionada ao visual studio, ou a […]

Estará “inline” sem “estático” ou “extern” útil em C99?

Quando tento construir esse código inline void f() {} int main() { f(); } usando a linha de comando gcc -std=c99 -oa ac Eu recebo um erro de vinculador (referência indefinida para f ). O erro desaparece se eu usar static inline ou extern inline vez de apenas inline , ou se eu compilar com […]

Existem máquinas, onde sizeof (char)! = 1, ou pelo menos CHAR_BIT> 8?

Existem máquinas (ou compiladores), onde sizeof(char) != 1 ? O padrão C99 diz que sizeof(char) na implementação de conformidade padrão DEVE ser exatamente 1? Se isso acontecer, por favor, me dê o número da seção e a citação. Update: Se eu tiver uma máquina (CPU), que não pode endereçar bytes (leitura mínima é de 4 […]