Описание тега variadic-macros

Макросы с переменным числом аргументов - это функция препроцессора C, которая позволяет использовать переменное количество аргументов для макроса. Они были добавлены в версии стандарта C.
1 ответ

GCC не удалось развернуть некоторые макросы

Я разрабатываю программу с использованием сторонней библиотеки пользовательского интерфейса с функциями в виде Vbox(void *first, ...), Они служат функциями макета и принимают произвольное количество параметров. Конец списка определяется первым обнар…
25 май '17 в 15:11
3 ответа

Variadic макрос для создания структуры

Как я могу написать макрос (для GCC), который будет использоваться следующим образом: CREATE_STRUCT(my_struct1,foo); CREATE_STRUCT(my_struct2,foo,bar); и расширяется до struct my_struct1 { std::string foo; }; struct my_struct2 { std::string foo; std…
25 апр '18 в 08:45
1 ответ

Ведение журнала с помощью макроса variadic

Я пытаюсь написать макрос регистрации без накладных расходов в C. Моя первая идея: #define debug_print(...) \ { \ printf(_LOG_FMT, _LOG_ARGS); \ printf(__VA_ARGS__); \ printf("\n"); \ } Но это проблема, которую я должен вызвать printf три раза (накл…
02 ноя '18 в 01:07
1 ответ

Нужно исправить мои Variadic Macros

Я хочу использовать переменные макросы, но я получаю ошибки #define SERVER_RE_1(ServerFunction, Type1) \ { \ Type1 arg1; \ getData(args, arg1); \ sv. ## ServerFunction ## (ssl, arg1); \ } #define SERVER_RE_2(ServerFunction, Type1, Type2) \ { \ Type1…
31 май '15 в 06:57
1 ответ

Макро подсчет параметров

Чтобы сделать компилятор счастливым, я должен посчитать количество передаваемых параметров A()иначе GCC повыситwarning: ISO C99 requires rest arguments to be used"когда педантичный флаг включен и передан только один параметр #include <stdio.h>…
04 янв '13 в 10:45
2 ответа

Расширение макроса C99 для доступа членов Struct

Можно ли сделать проверку на недействительность и доступ в макросе? Например: #define LOG(mystruct, severity, format, ...) ({ \ severity_t current = ERROR; \ if (mystruct) { \ current = mystruct->error_level; \ } \ if (severity >= current) { \…
25 сен '15 в 21:28
1 ответ

Макроизмененные параметры

У меня есть система с множеством наборов параметров "macroized" (макросы вида "#define name value,value,value). Я хотел бы передать их макросу, но когда я это делаю, я получаю ошибку. пример: void fn(int a, int b, int c){ return; } #define MACRO_1(a…
9 ответов

Есть ли способ написать макросы с переменным списком аргументов в Visual C++?

Насколько я знаю, в GCC вы можете написать что-то вроде: #define DBGPRINT(fmt...) printf(fmt); Есть ли способ сделать это в VC++?
15 сен '08 в 17:43
2 ответа

Что должен генерировать #__VA_ARGS__, когда нет переданных аргументов?

Пример кода: #define FOO(...) You passed: #__VA_ARGS__ FOO(1,2,3) FOO() Предварительная обработка с Visual C++ (версия 14 CTP), получить: You passed: "1,2,3" You passed: В последней строке #__VA_ARGS__ превращается в ничто. Я бы предпочел, чтобы оно…
01 июл '14 в 08:58
1 ответ

Эта тактика подсчета макро аргументов законна?

Я знал о VA_NARGS макрос, как описано в C Preprocessor, макрос "Перегрузка" некоторое время, но я всегда был отстранен большим количеством шаблонов, которые требуются, чтобы заставить его работать. Недавно мне понадобилась эта функциональность, и я …
21 окт '14 в 23:06
1 ответ

Передача произвольного числа аргументов в функцию

В общем, я хотел бы переопределить эту часть кода с помощью макросов, switch(count) { case 0: variadic(); case 1: variadic(array[0]); case 2; variadic(array[0], array[1]); case 3: variadic(array[0], array[1], array[2]); ... } Мое ограничение заключа…
14 июл '17 в 01:40
2 ответа

Что означает `(...)` при определении макроса?

Я обнаружил это в исходном коде Unreal Engine 4 и не узнал его. Конкретный пример этого: #undef UCLASS #define UCLASS(...) \ ARadialForceActor_EVENTPARM Я довольно новый программист, и этот вид макросов мне незнаком. Я предположил, что он определяет…
09 июн '14 в 01:28
3 ответа

Макрос для замены вложенных циклов

Я нашел этот макрос #define TIMES(x) for(int i1=0;i1<x;i1++)очень практично, чтобы сократить текст кода. Но я не знаю, как написать такой макрос, когда у меня есть вложенные циклы, и даже я не знаю, возможно ли это. Идея заключается в следующем. …
11 янв '19 в 07:33
3 ответа

Cpp: Как понять и / или отладить сложные макросы?

Я пытаюсь выучить приемы препроцессора, которые мне показались не такими простыми ( Можем ли мы иметь рекурсивные макросы?, Есть ли способ использовать строковое преобразование C++ для аргументов переменных макросов?, Препроцессор C++ __VA_ARGS__ ко…
2 ответа

Как расширить вариационные аргументы в макросе?

Я хочу по существу иметь макро-укорочитель. Макрос, FOO(A,B,C) следует расширить доdefined(_FOO_A) || defined(_FOO_B) || defined(_FOO_C), Возможно ли это в GCC, используя переменные макро-аргументы и фактически не писать 3 функции (FOO(A), FOO(A,B),…
21 дек '12 в 22:28
6 ответов

Написание макроса variadic, который использует имена переданных аргументов

Я хочу написать переменный макрос, который каким-то образом знает имена переданных аргументов. Например: Код: int x = 2; float f = 4.6; char c = 'A'; char* str = "Bla bla"; PRINT("%d %f %c %s", x, f, c, str); // calling the macro должен произвести в…
07 янв '14 в 08:56
2 ответа

Как я могу сгенерировать переменный макрос для объединенной строки

Я застрял здесь... #define CONCAT(a,b) BOOST_PP_STRINGIZE(BOOST_PP_CAT(a,b))#define CONCAT1(a,b,c) CONCAT(CONCAT(a,b),c) and so on. Как я могу сгенерировать макрос CONCAT, даже если 20 аргументов? Может быть, я могу использовать BOOST_PP_SEQ_FOR_EAC…
0 ответов

Вложенный макрос с начальными запятыми

У меня был variadic макрос, который работал отлично: #define COMPONENT_CLASS(name, inheritance...) \ class name : public Component, ##inheritance { По другой причине я старался избегать такого разнообразного использования. Мой подход выглядит так #d…
16 июл '17 в 18:14
2 ответа

Счетчик аргументов макроса Variadic не работает должным образом

Итак, в основном я пытаюсь реализовать макрос для подсчета количества аргументов в VA_ARGS. Для простоты работает только до 3 параметров. Проблема в том, что когда макрос используется с менее чем 3 параметрами, он не работает и вызывает ошибку "ожид…
20 авг '17 в 22:11
1 ответ

Как использовать переменные макропараметры как в определении функции, так и в вызове функции?

Я пытаюсь использовать макрос для определения нескольких похожих функций на основе параметров макроса. Однако число и типы параметров, которые должна принимать результирующая функция, не одинаковы для всех функций, но мне также нужно передать все ар…
16 янв '18 в 15:29