I have a question about using #undef
to redefine macros.
I have a file global.h
which contains a number of #define-d macros. In the code that uses these macros, I find that the values that the macros hold are not generic enough. I want to redefine the macros to make them more generic. I wrote the following code snippet to do just that:
std::cout << endl << "Enter pitch threshold:" << endl;
std::cin >> pitchT;
#ifdef PitchThreshold
#undef PitchThreshold
#define PitchThreshold pitchT
#endif
My questions are:
Does using a #undef in this manner ensure redefinition of the macro across all source files, or is it local to the function where the above lines of code are written? What is the scope of the #undef and #define operators?
What can I do (apart from changing the macros in the file where they are #define-d itself) to ensure that the macro definitions are changed across all source files?
Thanks,
Sriram
#ifdef
is a preprocessor directive, this means that it will be applied before your source code is compiled. It means that only the source code 'below' will be affected. If you run your source code through the preprocessor you'll be able to see the result. That will give you more insight in the workings of the preprocessor.
The scope of the #undef operator is the whole file after it's called. This includes all files that include it (because the preprocessor just chains the files together.) Because it's part of the preprocessor it doesn't have weird things like scope.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With