Вопросы по теме 'variadic-macros'

Генерация объявления функции с использованием итерации макроса
Я пытаюсь сгенерировать объявление функции с помощью макроса /* goal: generate int f(int a, float b) */ template<typename P> struct ptype; template<typename P> struct ptype<void(P)> { typedef P type; }; #define NAMEe #define...
5671 просмотров

Стандартная альтернатива трюку GCC ## __ VA_ARGS__?
Существует хорошо известный проблема с пустыми аргументами для макросов с переменным числом аргументов в C99. пример: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine");...
80271 просмотров
schedule 18.06.2022

Преобразование последовательности параметров макроса в отдельные макросы
Как получить доступ к каждому элементу в макросе, если определение похоже на MACRO (имя, последовательность), а код такой: MACRO("TheName", (Elem1) (Elem2) (Elem3) ) Я хочу сгенерировать следующий код: MACRO("TheName",...
349 просмотров

Visual Studio __VA_ARGS__ проблема
Я запускаю cl /P test.cpp, файл и результат выглядят следующим образом. test.cpp #define FiltedLog( ...) \ if (logDetail) \ MP_LOG(LOG_INFO, __VA_ARGS__); #define MP_LOG(level,fmt,...) \ BOOAT::LOG("MP", level, fmt,...
1897 просмотров

Что должен генерировать #__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__ превращается в ничто. Я бы...
3136 просмотров
schedule 20.11.2022

Возможна ли подстановка вариативного макроса для каждого аргумента?
Сейчас я прочитал довольно много вопросов на SO о вариативных макросах, но, похоже, никто не ответил на самый простой вопрос: #define IDENTITY(x) x #define IDENTITY_FOR_ALL(...) ??? Есть ли способ заставить IDENTITY_FOR_ALL расширяться до...
993 просмотров
schedule 21.07.2023

Как я могу проверить достоверность вариативного аргумента __VA_ARGS__?
Я хотел определить макрос, например - #define log(lognumber,...) logreport(lognumber,__VA_ARGS__) Я хотел проверить случай исключения для __VA_ARGS__ тех аргументов, которые пользователь может передать, когда этот пользователь вызывает...
206 просмотров
schedule 20.05.2022

Нужно исправить мои макросы Variadic
Я хочу использовать вариативные макросы, но получаю ошибки #define SERVER_RE_1(ServerFunction, Type1) \ { \ Type1 arg1;...
158 просмотров
schedule 08.03.2022

Вариативные макросы с перегрузкой функций
У меня есть функция: SendMsg(int x, string y, ...) { /*some code*/ } У меня есть макрос: FOO(X, STRING, ...) SendMsg(X, STRING "%s %d", ##__VA_ARGS__, "xyz", 123) так что я могу иметь что-то вроде этого: FOO(1000, "Note that line...
145 просмотров

Обернуть макрос с переменным количеством аргументов
Мне нужно обернуть макрос, чтобы к нему можно было получить доступ с помощью функции. Макрос определяется как: #define gDbgLog(fmt,...) dbgLog(g_pdbg,MODULE_NAME,__FUNCTION__,fmt,##__VA_ARGS__) и я попытался обернуть это так: void...
129 просмотров

«ISO C99 требует по крайней мере один аргумент для макроса с переменным числом аргументов». При специальном использовании макросов c11 и -Wno-variadic
У меня есть простой: #define log(text, ...) fprintf(stderr, "stuff before" text "stuff after", ## __VA_ARGS__); который запускает: error: ISO C99 requires at least one argument for the "..." in a variadic macro [-Werror] Должно ли использование...
7612 просмотров
schedule 19.11.2022

Совместимые с C99 вложенные вызовы в вариативных макросах
Нужен способ поддержки вложенных вызовов в вариативных макросах с необязательным аргументом. такой же, как этот , но совместимый с C99 Расширение GNU gcc для оператора ## предотвращает расширение вложенных вызовов, см. код ниже. #define...
833 просмотров
schedule 27.01.2023

Счетчик аргументов макроса Variadic не работает должным образом
Итак, в основном я пытаюсь реализовать макрос для подсчета количества аргументов в VA_ARGS . Для простоты он работает только до 3 параметров. Проблема в том, что когда макрос используется с менее чем 3 параметрами, он не работает и вызывает...
480 просмотров
schedule 21.06.2022

Как я могу оценить арифметическое выражение макрос-функции для перехода к другой макрос-функции в препроцессоре C?
как я могу заставить этот пример кода работать? (На C или C ++) Cout только для примера. Я хочу оценить правильное уменьшенное число #define PRINT_1 std::cout<<"One : " <<1; #define PRINT_2 std::cout<<"Two : " <<2;...
714 просмотров

count __VA_ARGS__ MSVC дает неожиданные результаты
Я пытаюсь подсчитать количество параметров для вызова правильного макроса. Конкатенация и количество аргументов, похоже, дают ожидаемые результаты, но по какой-то причине в MSVC количество аргументов не работает. Я пробовал известные исправления,...
351 просмотров
schedule 21.01.2023

C-препроцессор: итеративно расширять макрос до списка, разделенного запятыми
Используя решение Пола Фульца II в сообщении рекурсивный макрос C-препроцессора , я хотел бы расширить неограниченное количество аргументов макроса в скобках, например #define MY_CHAIN (alpha) (beta) (gamma) в список, разделенный запятыми,...
1167 просмотров

Неправильная замена прагмы OpenMP в расширении макроса
Когда прагма OpenMP используется как часть аргумента макроса, она заменяется неправильно. В этом коде: #define make_body( ... ) { __VA_ARGS__ } extern foo( int ); int main(){ make_body( #pragma omp parallel for for( int i = 0; i <...
97 просмотров
schedule 20.05.2023

Case вариативный макрос в C
У меня есть 2 макроса-оболочки для утверждения входных параметров функции: /** * @brief An assert wrapper with no value return in case assert fails. * @param x_: value to test for being non zero. */ #define UTIL_ASSERT_VOID(x_)...
132 просмотров
schedule 02.07.2023

Как легко создавать полностью вариативные функции со стандартом C ++ 98?
Библиотека https://github.com/c42f/tinyformat/blob/2f9335afd9941688e42d60cae5166b9f0600b2d1/tinyformat.h#L1104-L1116 , использует этот потрясающий трюк для создания "вариативных" шаблонов на C ++ 98: inline void printfln(const char* fmt) {...
432 просмотров