Pergunta


Eu tenho uma pergunta sobre usar #undef Para redefinir macros.
Eu tenho um arquivo global.h que contém uma série de macros #define-D. No código que usa essas macros, acho que os valores que as macros mantêm não são genéricas o suficiente. Quero redefinir as macros para torná -las mais genéricas. Eu escrevi o seguinte snippet de código para fazer exatamente isso:

 std::cout << endl << "Enter pitch threshold:" << endl;  
 std::cin >> pitchT;  
 #ifdef PitchThreshold  
  #undef PitchThreshold  
  #define PitchThreshold pitchT   
  #endif  

Minhas perguntas são:
O uso de um #undef dessa maneira garante a redefinição da macro em todos os arquivos de origem ou é local para a função em que as linhas de código acima estão escritas? Qual é o escopo dos operadores #Undef e #Define?
O que posso fazer (além de alterar as macros no arquivo onde estão #definir-D) para garantir que as definições de macro sejam alteradas em todos os arquivos de origem?
Obrigado,
Sriram

Foi útil?

Solução

#ifdef é uma diretiva de pré -processador, isso significa que ela será aplicada antes que seu código -fonte seja compilado. Isso significa que apenas o código -fonte 'abaixo' será afetado. Se você executar seu código -fonte através do pré -processador, poderá ver o resultado. Isso lhe dará mais informações sobre o funcionamento do pré -processador.

Outras dicas

O escopo do operador #Undef é o arquivo inteiro depois que ele é chamado. Isso inclui todos os arquivos que o incluem (porque o pré -processador apenas aciona os arquivos.) Porque faz parte do pré -processador, não tem coisas estranhas como o escopo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top