Articles of pré processador

Qual é o valor de uma constante indefinida usada em # if?

Meu pré-processador parece assumir que as constantes indefinidas são 0 para avaliar as condições #if . Isso pode ser invocado, ou constantes indefinidas dão um comportamento indefinido?

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