Articles of c99

Tipo de dados booleano C99?

Qual é o tipo de dados booleano C99 e como usá-lo?

Alternativa padrão para o truque ## __ VA_ARGS__ do GCC?

Existe um problema bem conhecido com argumentos vazios para macros variadic em C99. exemplo: #define FOO(…) printf(__VA_ARGS__) #define BAR(fmt, …) printf(fmt, __VA_ARGS__) FOO(“this works fine”); BAR(“this breaks!”); O uso de BAR() acima está de fato incorreto de acordo com o padrão C99, já que ele se expandirá para: printf(“this breaks!”,); Observe a vírgula à direita […]

O que significa ponto (.) Em um inicializador struct?

static struct fuse_oprations hello_oper = { .getattr = hello_getattr, .readdir = hello_readdir, .open = hello_open, .read = hello_read, }; Eu não entendo bem essa syntax C. Não consigo nem pesquisar porque não sei o nome da syntax. O que é isso?

bool para conversão int

Quão portável é essa conversão. Posso ter certeza de que ambas as asserções são aprovadas? int x = 45; assert(x==0); Não pergunte por quê. Eu sei que isso é feio. Obrigado.

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