Будет подставлено ИМЯ ПЕРЕМЕННОЙ b, а чему она равна — это уже другой вопрос. Никаких проблем не должно быть.
#include <iostream>
#define CHECK(a,b) \
if ((a) == (b)) \
std::cout << "Equal" << std::endl; \
else std::cout << "Inequal" << std::endl;
int main()
{
for (int i = 0; i < 5; ++i) {
CHECK (i, 2)
}
return 0;
}
После препроцессирования программа превратится вот во что…
int main()
{
for (int i = 0; i < 5; ++i) {
if ((i) == (2))
std::cout << "Equal" << std::endl;
else std::cout << "Inequal" << std::endl;
}
return 0;
}
Вывод в консоли
Inequal
Inequal
Equal
Inequal
Inequal
Разумеется, нехороши ситуации, когда в макрос подставляется код с побочными эффектами, но это другой вопрос.