Препроцессор C++ VARARGS — неверный синтаксис в файле заголовка NodejSC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Препроцессор C++ VARARGS — неверный синтаксис в файле заголовка NodejS

Сообщение Anonymous »

Я немного экспериментирую с попыткой собрать NodeJS 24.11.1 с GCC 13.4.0 в более старой системе OS X, в основном как неосуществимый проект.
Независимо от причин, среди ожидаемых препятствий есть довольно неожиданное, которое, похоже, поднимает общий вопрос о синтаксисе C++. Кстати, это происходит при компиляции deps/v8/src/baseline/baseline.cc.
В заголовочном файле deps/v8/src/codegen/interface-descriptors.h, среди прочих, есть эти два макроса (я удалил встроенные комментарии, потому что в противном случае я не смог бы создать предварительно обработанный файл baseline.i):

Код: Выделить всё

#define DEFINE_RESULT_AND_PARAMETERS(return_count, ...)   \
static constexpr int kReturnCount = return_count;       \
enum ParameterIndices {                                 \
__dummy = -1, \
##__VA_ARGS__,                                        \
\
kParameterCount,                                      \
kContext = kParameterCount    \
};

#define DEFINE_PARAMETERS(...) DEFINE_RESULT_AND_PARAMETERS(1, ##__VA_ARGS__)

Код: Выделить всё

class V8_EXPORT_PRIVATE VoidDescriptor
: public StaticCallInterfaceDescriptor {
public:
// The void descriptor could (and indeed probably should) also be NO_CONTEXT,
// but this breaks some code assembler unittests.
INTERNAL_DESCRIPTOR()
DEFINE_PARAMETERS()
DEFINE_PARAMETER_TYPES()
DECLARE_DESCRIPTOR(VoidDescriptor)

static constexpr auto registers();
};
Обратите внимание, что DEFINE_PARAMETERS вызывается без аргументов, что расширяется до:

Код: Выделить всё

static constexpr int kReturnCount = 1; enum ParameterIndices { __dummy = -1,, kParameterCount, kContext = kParameterCount };
И ошибка компилятора, которая кажется вполне оправданной:

Код: Выделить всё

../deps/v8/src/codegen/interface-descriptors.h:662:18: error: expected identifier before ',' token
662 |     ##__VA_ARGS__,                                        \
Дело в том, что этот конкретный код заголовочного файла не изменился со времен Node 22.21.1 - и я смог выполнить обычную сборку этой версии с помощью clang (16) в той же системе. И с GCC 13 на хосте Linux. Оба этих компилятора должны видеть один и тот же код - и да, когда я просто беру неудачную команду компиляции и выполняю ее из оболочки с помощью clang++-16 вместо g++-13, я также получаю сообщение об ошибке об этом отсутствующем идентификаторе.
Что мне здесь не хватает?

Подробнее здесь: https://stackoverflow.com/questions/798 ... eader-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»