область применения #undef C ++ - PullRequest
4 голосов
/ 01 ноября 2010


У меня есть вопрос об использовании #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), чтобы гарантировать, что определения макросов будут изменены во всех исходных файлах?
Спасибо,
Шрирам

Ответы [ 2 ]

10 голосов
/ 01 ноября 2010

#ifdef - это директива препроцессора, это означает, что она будет применена до компиляции исходного кода.Это означает, что будет затронут только исходный код «ниже».Если вы запустите исходный код через препроцессор, вы сможете увидеть результат.Это даст вам больше понимания работы препроцессора.

2 голосов
/ 01 ноября 2010

Область действия оператора #undef - это весь файл после его вызова. Это включает все файлы, которые включают его (потому что препроцессор просто объединяет файлы в цепочку). Поскольку он является частью препроцессора, у него нет странных вещей, таких как область действия.

...