Здравствуйте, Wasiliy, Вы писали:
W>Подскажите пожалуйста, возможно ли передать переменное число аргументов в макрос? W>В смысле, MY_MACROS(Param1, pAram2,...) — возможно ли так сделать?
Если число параметров ограничено можно воспользоваться "перегрузкой" макроса.
#define X() F
#define X(x) F##x
#define X(x,y) F##x##y
#define X(x,y,z) F##x##y##z
void main()
{
int X()=0; // int F=0;int X(a)=1; // int Fa=1;int X(ab)=2; // int Fab=2;int X(abc)=3; // int Fabc=3
}
При этом выпадает куча предупреждений но код компилируется.
Здравствуйте, Wasiliy, Вы писали:
W>Подскажите пожалуйста, возможно ли передать переменное число аргументов в макрос? W>В смысле, MY_MACROS(Param1, pAram2,...) — возможно ли так сделать?
Здравствуйте, Wasiliy, Вы писали:
W>Подскажите пожалуйста, возможно ли передать переменное число аргументов в макрос? W>В смысле, MY_MACROS(Param1, pAram2,...) — возможно ли так сделать?
Здравствуйте, Wasiliy, Вы писали:
W>Подскажите пожалуйста, возможно ли передать переменное число аргументов в макрос? W>В смысле, MY_MACROS(Param1, pAram2,...) — возможно ли так сделать?
Если весь смысл макроса состоит в вызове функции с тем же набором параметров, то есть такой вариант:
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, _nn_, Вы писали:
__>>Если число параметров ограничено можно воспользоваться "перегрузкой" макроса. WH> А где об этом в стандарте написано?
Об этом написано в стандарте ?
WH>ЗЫ
VC это компилит, а что насчет стандарта то это я не знаю.
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, WolfHound, Вы писали:
WH>>Здравствуйте, _nn_, Вы писали:
__>>>Если число параметров ограничено можно воспользоваться "перегрузкой" макроса. WH>> А где об этом в стандарте написано? __>Об этом написано в стандарте ?
WH>>ЗЫ
__>VC это компилит, а что насчет стандарта то это я не знаю.
он то компилит, но последнее переопределение define скрывает предыдущие
Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, _nn_, Вы писали:
__>>Здравствуйте, WolfHound, Вы писали:
WH>>>Здравствуйте, _nn_, Вы писали:
__>>>>Если число параметров ограничено можно воспользоваться "перегрузкой" макроса. WH>>> А где об этом в стандарте написано? __>>Об этом написано в стандарте ?
WH>>>ЗЫ
__>>VC это компилит, а что насчет стандарта то это я не знаю. V>он то компилит, но последнее переопределение define скрывает предыдущие
Здравствуйте, Wasiliy, Вы писали:
W>Подскажите пожалуйста, возможно ли передать переменное число аргументов в макрос? W>В смысле, MY_MACROS(Param1, pAram2,...) — возможно ли так сделать?
Здравствуйте, _nn_, Вы писали:
__>В таком случае можно повеселиться еще больше : __>Можно сделать макрос с выборочными аргументами ! __>[c] __>#define A(x,y,z) a##x##y##z
Более того, с переменным числом параметров...
но особо не обольщайся — это не по стандарту,
однако и надейся, перезагрузка макросов предлагалась неоднократно
Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, _nn_, Вы писали:
__>>В таком случае можно повеселиться еще больше : __>>Можно сделать макрос с выборочными аргументами ! __>>
__>>#define A(x,y,z) a##x##y##z
V>Более того, с переменным числом параметров... V>но особо не обольщайся — это не по стандарту, V>однако и надейся, перезагрузка макросов предлагалась неоднократно
Этим способом можно еще воспользоваться для такого :
// Вместо CAT2,CAT3,CAT4,CAT5 .... всего один макрос#define CAT(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9) \
a0##a1##a2##a3##a4##a5##a6##a7##a8##a9
CAT(a,b)
CAT(a,b,c)
CAT(a,b,c,d)
//...
Я вот подумал, что раз при не задании аргумента в макросе он становится пустым возможно есть способ подсчитать колличество активных аргументов в макросе, если бы можно как-нибудь определять если аргумент макроса пустой или нет.
Здравствуйте, _nn_, Вы писали:
__>Я вот подумал, что раз при не задании аргумента в макросе он становится пустым возможно есть способ подсчитать колличество активных аргументов в макросе, если бы можно как-нибудь определять если аргумент макроса пустой или нет.
Нашелся способ подсчитать количество аргументов в макросе :