Область применения #undef C++
У меня есть вопрос об использовании #undef
переопределить макросы.
У меня есть файл global.h
который содержит ряд макросов #define-d. В коде, использующем эти макросы, я обнаружил, что значения, которые содержат макросы, не являются достаточно общими. Я хочу переопределить макросы, чтобы сделать их более общими. Я написал следующий фрагмент кода, чтобы сделать это:
std::cout << endl << "Enter pitch threshold:" << endl;
std::cin >> pitchT;
#ifdef PitchThreshold
#undef PitchThreshold
#define PitchThreshold pitchT
#endif
Мои вопросы:
Обеспечивает ли использование #undef таким образом переопределение макроса во всех исходных файлах или это локально для функции, в которой написаны строки кода выше? Какова область действия операторов #undef и #define?
Что я могу сделать (кроме изменения макросов в файле, где они сами являются #define-d), чтобы гарантировать, что определения макросов будут изменены во всех исходных файлах?
Спасибо,
Sriram
3 ответа
#ifdef
это директива препроцессора, это означает, что она будет применена до компиляции вашего исходного кода. Это означает, что будет затронут только исходный код "ниже". Если вы запустите исходный код через препроцессор, вы сможете увидеть результат. Это даст вам больше понимания работы препроцессора.
Область действия оператора #undef - это весь файл после его вызова. Это включает в себя все файлы, которые включают его (потому что препроцессор просто объединяет файлы в цепочку). Поскольку он является частью препроцессора, у него нет таких странных вещей, как область действия.
любой
он имеет довольно простую логику, но может сбить с толку из-за того, что определения разрешены как внутри, так и снаружи любых функций.
Отвечая на последний вопрос:
Мы не можем с комфортом переопределить макросы — в смысле
На практике можно сделать нечто вроде стандартного — объявление новой переменной (вверху страницы).