Apache Spark ALS Рекомендация

Стандартные состояния C ++ 11 (3.2.3), которые:

Каждая программа должна содержать ровно одно определение каждой нестрочной функции или переменной, которая является odr-используемой в этой программе ; не требуется диагностика. Определение может явно отображаться в программе, оно может быть найдено в стандартной или определяемой пользователем библиотеке или (если необходимо), оно неявно определено (см. 12.1, 12.4 и 12.8). Встроенная функция должна быть определена в каждой единицы перевода, в которой она используется odr.

C ++ также знает об extern + inline, но понимает это как «Встроенная функция с внешней связью должна иметь один и тот же адрес во всех единицах трансляции "(7.1.2)

Таким образом, extern + inline, поскольку вы используете его, является чистой функцией C99, и вам должно быть достаточно сделать что-то вроде:

#ifdef __cplusplus
#define C99_PROTOTYPE(x)
#else
#define C99_PROTOTYPE(x) x
#endif

И ссылайтесь в buffer.c:

// buffer.c
C99_PROTOTYPE(extern inline bool has_remaining(void * obj);)

встроенная функция в заголовке для C ++ 11 в порядке и должна отлично работать без прототипов в стиле C99.

7
задан zero323 25 April 2016 в 12:30
поделиться