Не удалось использовать inline в объявлении получить ошибку C2054
Я пытаюсь скомпилировать некоторые проекты с открытым исходным кодом, используя компилятор vs2013 c/С++. Файл имеет расширение .c. Код ниже возвращает некоторые ошибки (ниже). Все они могут быть "исправлены", просто удалив inline в декларации. Примечание: не реальная функция, просто иллюстративная
static inline int pthread_fetch_and_add(int *val, int add, int *mutex)
{
return 0;
}
ошибки
ошибка C2054: ожидается '(' следовать 'inline'
ошибка C2085: 'pthread_fetch_and_add': не в списке официальных параметров
ошибка C2143: синтаксическая ошибка: отсутствует ';' до '{'
Ответы
Ответ 1
Используйте __inline
с MSVC.
inline
- это ключевое слово c99, а c99 еще не (полностью) поддерживается с помощью MSVC.
"Ключевое слово inline доступно только в С++. Ключевые слова __inline и __forceinline доступны как на C, так и на С++. Для совместимости с предыдущими версиями _inline является синонимом __inline."
Источник: http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx
Ответ 2
Простым обходным решением является -Dinline = __ inline с компилятором MSVC.
Ответ 3
Я столкнулся с той же проблемой. Вместо того чтобы менять каждый inline
на __inline
, перед всеми объявлениями функций я добавил следующее:
#if defined(_MSC_VER)
#define inline __inline
#endif
Это позволит исходному коду все еще компилироваться как есть с другим компилятором (предположительно не имеющим тех же ограничений, что и VS).