Почему использование скобок в первом коде работает, а второе - нет?Разница между переменными параметрами с круглыми скобками и без них
В первом коде я использую только переменный параметр с круглыми скобками, а второй имеет параметр Integer с переменным, если я использую круглые скобки, когда я вызываю функцию, она не будет работать.
#include <bits/stdc++.h>
void func(char* szFormat, ...);
#define M1(a) M2(a)
#define M2(b) func b
int main()
{
M1(("Hello %s %d\n", "world",2015)); // this works
return 0;
}
void func(char* szFormat, ...)
{
char trace_str[1000];
va_list arg_list;
std::string str;
va_start(arg_list, szFormat);
vsprintf(trace_str, szFormat, arg_list);
va_end(arg_list);
str += trace_str;
std::cout << str << std::endl;
}
Этот код не работает, используя круглые скобки.
#include <bits/stdc++.h>
void func(int year, char* szFormat, ...);
#define M1(a,...) M2(a, __VA_ARGS__)
#define M2 func
int main()
{
// M1(2015, ("Hello %s", "world")); // this doesn't works
M1(2015, "Hello %s", "world"); // this way works
return 0;
}
void func(int year, char* szFormat, ...)
{
char trace_str[1000];
va_list arg_list;
std::string str;
va_start(arg_list, szFormat);
vsprintf(trace_str, szFormat, arg_list);
va_end(arg_list);
str += trace_str;
std::cout << str << " " << year << std::endl;
}
Спасибо всем!
Вы действительно использовать в с переменным числом аргументов ++? Никогда не видел этого в течение длительного времени ... – Klaus