Следующий код C++ компилируется и работает программистом, предназначенного на GCC (4.0.4)препроцессора макросы в качестве параметров других макросов
#define FOO(x,y,z) ((x)*(y)*(z))
#define BAR(x) FOO(x,1)
#define BAZ 3,7
int main()
{
return BAR(BAZ); /* interpreted as return ((3)*(7)*(1)); */
}
Однако макросы вызывают ошибку на Microsoft Visual C++ Express 2010:
main.cpp (7): предупреждение C4003: не хватает фактических параметров для макроса 'Foo'
main.cpp (7): ошибка C2059: синтаксическая ошибка: ')'
Проблема заключается в том, что компилятор Microsoft при обработке макроса BAR внутренне не расширяет макрос BAZ до параметров, которые могут использоваться как два отдельных параметра для макроса FOO.
В соответствии со стандартом, который компилятор правильно обрабатывает ситуацию?
Кажется, что вы действительно ищете [variadic macros] (http://en.wikipedia.org/wiki/Variadic_macro). – leftaroundabout
@leftaroundabout это не похоже, что он ... –
@iammilind: Что отсутствует в главе 16 стандарта? Как это не «настоящий» стандарт? –