Я считаю, что проблема в том, что and
- это ключевое слово в C ++, но не в C (они используют &&
).
Парни из ядра иногда используют макросы как альтернативу встроенным функциям. Иногда, однако, им нужны макросы, потому что то, что они хотят сделать, должно быть сделано в области вызывающей функции, и определение функции, которая будет работать, не будет работать (например, макрос для определения имени текущей функции). ).
Предполагая, что рассматриваемые макросы действительно являются ложными встроенными функциями, можно написать собственный файл .c, полный только функций, вызывающих эти макросы, скомпилировать его и ссылаться на эти функции через заголовок extern "C"
. Вы бы получили такое же поведение, но чуть хуже производительность (что вряд ли будет проблемой).
Если макросы действительно должны быть макросами, то лучше всего отредактировать их вручную, чтобы они были совместимы с C ++.