Это не ответ на ваш вопрос, просто сообщение CW с некоторыми советами, которые помогут вам самостоятельно исследовать препроцессор.
Этап предварительной обработки фактически выполняется перед компиляцией любого фактического кода. Другими словами, когда компилятор начинает собирать ваш код, никаких # определения операторов или чего-либо подобного не остается.
Хороший способ понять, что препроцессор делает с вашим кодом, - это получить предварительно обработанный вывод и посмотреть на него.
Вот как это сделать для Windows:
Создайте простой файл с именем test.cpp и поместите его в папку, скажем, c: \ temp.
Моя выглядит так:
#define dog_suffix( variable_name ) variable_name##dog
int main()
{
int dog_suffix( my_int ) = 0;
char dog_suffix( my_char ) = 'a';
return 0;
}
Не очень полезно, но просто. Откройте командную строку Visual Studio, перейдите к папке и выполните следующую командную строку:
c:\temp>cl test.cpp /P
Итак, ваш компилятор (cl.exe) работает с вашим файлом, а параметр / P указывает компилятору сохранить предварительно обработанный вывод в файл.
Теперь в папке рядом с test.cpp вы найдете test.i, который для меня выглядит так:
#line 1 "test.cpp"
int main()
{
int my_intdog = 0;
char my_chardog = 'a';
return 0;
}
Как видите, # define не осталось, только код, в который он был расширен.