Articles of c pré processador

O MSVC não expande corretamente __VA_ARGS__

Considere este código: #define F(x, …) X = x and VA_ARGS = __VA_ARGS__ #define G(…) F(__VA_ARGS__) F(1, 2, 3) G(1, 2, 3) A saída esperada é X = 1 and VA_ARGS = 2, 3 para ambas as macros, e é isso que estou obtendo com o GCC, no entanto, o MSVC expande isso como: X […]

Por que o pré-processador C interpreta a palavra “linux” como a constante “1”?

Por que o pré-processador C no GCC interpreta a palavra linux (letras minúsculas) como a constante 1 ? test.c: #include int main(void) { int linux = 5; return 0; } Resultado de $ gcc -E test.c (pare após o estágio de pré-processamento): …. int main(void) { int 1 = 5; return 0; } Que, claro, […]

Macro vs function em C

Eu sempre vi exemplos e casos em que usar uma macro é melhor do que usar a function. Alguém poderia me explicar com um exemplo a desvantagem de uma macro em comparação com uma function?

Incluindo um arquivo de origem C em outro?

Está tudo bem (ou até recomendado / boa prática) para o arquivo #include .c em outro arquivo .c? O que acontece quando eles são incluídos em um arquivo de projeto?

O pré-processador de despejo do GCC define

Existe uma maneira de gcc / g + + para despejar seu pré-processador define a partir da linha de comando? Quero dizer coisas como __GNUC__ , __STDC__ e assim por diante.

Como fazer uma macro variádica (número variável de argumentos)

Eu quero escrever uma macro em C que aceita qualquer número de parâmetros, não um número específico exemplo: #define macro( X ) something_complicated( whatever( X ) ) onde X é qualquer número de parâmetros Eu preciso disso porque o whatever está sobrecarregado e pode ser chamado com 2 ou 4 parâmetros. Eu tentei definir a […]

Quais são as aplicações do operador de pré-processamento ## e as pegadinhas a serem consideradas?

Como mencionado em muitas das minhas perguntas anteriores, estou trabalhando com K & R e estou atualmente no pré-processador. Uma das coisas mais interessantes – algo que eu nunca soube antes de qualquer uma das minhas tentativas anteriores para aprender C – é o operador pré-processador ## . De acordo com K & R: O […]

Por que as macros do pré-processador são malignas e quais são as alternativas?

Eu sempre perguntei isso, mas nunca recebi uma resposta realmente boa; Eu acho que quase qualquer programador antes mesmo de escrever o primeiro “Hello World” encontrou uma frase como “macro nunca deve ser usada”, “macro são malignas” e assim por diante, minha pergunta é: por quê? Com o novo C ++ 11 existe uma alternativa […]

Combinando C ++ e C – como funciona o #ifdef __cplusplus?

Eu estou trabalhando em um projeto que tem um monte de código C legado. Nós começamos a escrever em C ++, com a intenção de eventualmente converter o código legado, também. Estou um pouco confuso sobre como o C e o C ++ interagem. Eu entendo que ao envolver o código C com o extern […]

Devo usar #include nos headers?

É necessário #include algum arquivo, se dentro de um header (* .h), os tipos definidos neste arquivo são usados? Por exemplo, se eu usar o GLib e desejar usar o tipo básico do gchar em uma estrutura definida no meu header, é necessário fazer um #include , sabendo que eu já o tenho no meu […]