alcance de #undef C ++
Pregunta
Tengo una pregunta acerca del uso de macros para #undef
Redefinir.
Tengo un global.h
archivo que contiene una serie de # define-d macros. En el código que utiliza estas macros, me parece que los valores que sostienen las macros no son lo suficientemente genérico. Quiero volver a definir las macros para hacerlos más genérico. Escribí el siguiente fragmento de código para hacer precisamente eso:
std::cout << endl << "Enter pitch threshold:" << endl;
std::cin >> pitchT;
#ifdef PitchThreshold
#undef PitchThreshold
#define PitchThreshold pitchT
#endif
Mis preguntas son:
¿Si se usa un #undef de esta manera asegurar la redefinición de la macro en todos los archivos de origen, o es local a la función donde las líneas anteriores de código se escriben? ¿Cuál es el alcance de los operadores y #undef #define?
¿Qué puedo hacer yo (aparte de cambiar las macros en el archivo donde están # define-d sí mismo) para asegurar que las definiciones de macro se cambian en todos los archivos de origen?
Gracias,
Sriram
Solución
#ifdef
es una directiva de preprocesador, esto significa que se va a aplicar antes de compilar el código fuente. Esto significa que sólo el código fuente de 'abajo' se verá afectada. Si ejecuta su código fuente a través del preprocesador podrás ver el resultado. Eso le dará una visión más clara en el funcionamiento del preprocesador.
Otros consejos
El alcance del operador #undef es todo el archivo después de que se llama. Esto incluye todos los archivos que lo incluyen (debido a que el preprocesador sólo las cadenas de los archivos juntos.) Debido a que es parte del preprocesador que no tiene cosas raras como el ámbito de aplicación.