gcc не может расширить макрос при передаче лямбда в качестве параметра? - ошибка gcc [дубликат]

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

2
задан fhdnsYa 8 October 2015 в 12:56
поделиться

2 ответа

В качестве альтернативы @ ответа SingerofTheFall (который исправляет проблему при вызове макроса), вы также можете исправить проблему в самом макросе, сделав ее переменной:

#define MACRO_EXAMPLE(...) foo(__VA_ARGS__)

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

3
ответ дан Community 19 August 2018 в 13:54
поделиться

Добавьте еще один круг круглых скобок:

MACRO_EXAMPLE(([i, j](){}));
//            ^          ^

В противном случае часть перед , интерпретируется как первый параметр макроса, а часть после , интерпретируется как второй параметр макроса.

6
ответ дан SingerOfTheFall 19 August 2018 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: