Область действия директивы препроцессора начинается, когда она анализируется из источника, и сохраняется до тех пор, пока не будет указано иное. Если вы хотите ограничить область действия директивы препроцессора, используйте объявление "undef", которое отключается, когда вы закончите с ним.
#include <iostream>
using namespace std ;
int main()
{
#define someString "this is a string"
cout<<someString<<endl;
#undef someString // scope of someString ends here
cout<<someString<<endl; //this causes a compile error
return 0 ;
}