Articles of c pré processador

Expansão de macro variadic do MSVC ++

Então eu tenho uma macro que funciona muito bem no GCC, mas não no compilador C ++ da Microsoft. Espero que alguém possa saber de uma solução alternativa, ou talvez possa me explicar por que ela se comporta dessa maneira. Tenho certeza de que essa macro não é exatamente “padrão”, mas realmente me ajudaria. Aqui […]

Como fazer uma string char a partir do valor de uma macro C?

Por exemplo, como evitar escrever o ‘func_name’ duas vezes? #ifndef TEST_FUN # define TEST_FUN func_name # define TEST_FUN_NAME “func_name” #endif Eu gostaria de seguir a regra do Ponto Único da Verdade . Versão do pré-processador C: $ cpp –version cpp (GCC) 4.1.2 20070626 (Red Hat 4.1.2-14)

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