Articles of pré processador

Devo preferir constantes ao longo de definições?

Em C, devo preferir constantes acima de define? Eu tenho lido muito código ultimamente, e todos os exemplos fazem uso pesado de define.

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

Alterar o código de destino C # DllImport, dependendo do x64 / x86

Duplicar Possível: diretiva de pré-processador… C # Eu tenho uma dll externa c ++ para importar usando DLLImport. Se meu aplicativo está compilando em x64 eu preciso importar a versão x64 desta dll, se for uma compilation x86, eu preciso da dll x86. Qual a melhor maneira de alcançar isto? Idealmente, eu gostaria de alguma […]

Como comparar seqüências de caracteres em diretivas de pré-processador condicional de C

Eu tenho que fazer algo assim em C. Ele só funciona se eu usar um char, mas eu preciso de uma string. Como posso fazer isso? #define USER “jack” // jack or queen #if USER == “jack” #define USER_VS “queen” #elif USER == “queen” #define USER_VS “jack” #endif

Pré-processador de C ++ # define uma palavra-chave. É norma em conformidade?

Ajude a resolver o debate que está acontecendo nos comentários desta pergunta sobre bool e 1 : Um pré-processador C ++ em conformidade com os padrões permite usar o #define para redefinir uma palavra-chave? Em caso afirmativo, um pré-processador C ++ em conformidade com os padrões deve permitir isso? Se um programa C ++ redefinir […]

Quais são os caracteres válidos para nomes de macro?

Os nomes de macro no estilo C estão sujeitos às mesmas regras de nomenclatura que os identificadores? Depois de um upgrade do compilador, ele agora está emitindo esse aviso para um aplicativo herdado: warning #3649-D: white space is required between the macro name “CHAR_” and its replacement text #define CHAR_& 38 Essa linha de código […]

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