Вопросы по теме '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 просмотров
schedule
18.02.2022
Стандартная альтернатива трюку 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 просмотров
schedule
04.02.2023
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 просмотров
schedule
20.06.2023
Что должен генерировать #__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 просмотров
schedule
30.10.2022
Обернуть макрос с переменным количеством аргументов
Мне нужно обернуть макрос, чтобы к нему можно было получить доступ с помощью функции. Макрос определяется как:
#define gDbgLog(fmt,...) dbgLog(g_pdbg,MODULE_NAME,__FUNCTION__,fmt,##__VA_ARGS__)
и я попытался обернуть это так:
void...
129 просмотров
schedule
27.09.2022
«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 просмотров
schedule
15.01.2023
count __VA_ARGS__ MSVC дает неожиданные результаты
Я пытаюсь подсчитать количество параметров для вызова правильного макроса. Конкатенация и количество аргументов, похоже, дают ожидаемые результаты, но по какой-то причине в MSVC количество аргументов не работает. Я пробовал известные исправления,...
351 просмотров
schedule
21.01.2023
C-препроцессор: итеративно расширять макрос до списка, разделенного запятыми
Используя решение Пола Фульца II в сообщении рекурсивный макрос C-препроцессора , я хотел бы расширить неограниченное количество аргументов макроса в скобках, например
#define MY_CHAIN (alpha) (beta) (gamma)
в список, разделенный запятыми,...
1167 просмотров
schedule
28.05.2022
Неправильная замена прагмы 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 просмотров
schedule
28.02.2023