Articles of pré processador

Stringificação – como funciona?

Eu sei disso: #define foo 4 #define str(s) #s com str(foo) escreve: “foo” , porque stringify é executado primeiro da expansão de texto, mas isto: #define xstr(s) str(s) #define str(s) #s #define foo 4 com xstr(foo) escreve: “4” . Por quê? Quais são as etapas envolvidas no processo?

Preprocessador C, Stringify o resultado de uma macro

Eu quero restringir o resultado de uma expansão de macro. Eu tentei com o seguinte: #define QUOTE(str) #str #define TEST thisisatest #define TESTE QUOTE(TEST) E o TESTE é expandido para: “TEST”, enquanto eu estou tentando obter “thisisatest”. Eu sei que este é o comportamento correto do pré-processador, mas alguém pode me ajudar com uma maneira […]

Qual é o significado de linhas começando com um sinal de hash e número como ‘# 1’ ac ” na saída do pré-processador do gcc?

Eu imprimo a saída do pré-processador C usando gcc -E ac A saída contém muitas linhas como # 1 “ac” # 1 “” # 1 “” # 1 “ac” # 1 “c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h” 1 3 # 19 “c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h” 3 # 1 “c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h” 1 3 # 31 “c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h” 3 # 32 “c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h” 3 # 20 “c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h” 2 […]

Existe um pré-processador C que elimina blocos #ifdef baseados em valores definidos / indefinidos?

Pergunta original O que eu gostaria não é um pré-processador C padrão, mas uma variação que aceitaria de algum lugar – provavelmente a linha de comando através das opções -DNAME1 e -UNAME2 – uma especificação de quais macros são definidas e, então, eliminaria código. Pode ser mais fácil entender o que estou procurando com alguns […]

Como faço para verificar o sistema operacional com uma diretiva de pré-processamento?

Eu preciso do meu código para fazer coisas diferentes com base no sistema operacional no qual ele é compilado. Estou procurando algo parecido com isto: #ifdef OSisWindows // do Windows-specific stuff #else // do Unix-specific stuff #endif Existe uma maneira de fazer isso? Existe uma maneira melhor de fazer a mesma coisa?

Por que #ifndef e #define são usados ​​em arquivos de header C ++?

Eu tenho visto código como este geralmente no início dos arquivos de header: #ifndef HEADERFILE_H #define HEADERFILE_H E no final do arquivo é #endif Qual é o propósito disso?

Concatenação de Cadeia de Códigos de Macro C / C ++

#define STR1 “s” #define STR2 “1” #define STR3 STR1 ## STR2 É possível concatenar STR3 == “s1”? Você pode fazer isso passando argumentos para outra function Macro. Mas há um caminho direto?

Quando as macros C ++ são benéficas?

O pré-processador C é justificadamente temido e evitado pela comunidade C ++. Funções alinhadas, consts e templates são geralmente uma alternativa mais segura e superior a um #define . A macro a seguir: #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0) não é de forma superior ao tipo seguro: inline bool succeeded(int hr) { return hr >= 0; […]

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

Os typedef e # definem o mesmo em c?

Gostaria de saber se typedef e #define são os mesmos em c ?