Для localhost / wampserver 3 мы можем установить sql-mode = user_mode, чтобы удалить эту ошибку:
click on wamp icon -> MySql -> MySql Setting -> sql-mode -> user_mode
затем перезапустить wamp или apache
Об этом сообщается gcc: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56066 после обсуждения, начинающегося здесь: http: // gcc. gnu.org/ml/gcc-help/2013-01/msg00152.html
В linux gcc испускает слабые символы для встроенных функций и сильный символ для внешнего встроенного. При времени соединения слабые отбрасываются в пользу сильного. Видимо, на окнах все обрабатывается по-разному. У меня нет опыта работы с окнами, поэтому я не могу сказать, что там происходит.
Использование static
с inline
должно исправить проблему с несколькими определениями. Даже для компилятора, который не может самостоятельно решить, что он не должен генерировать символы для функций inline'd.
Стандартные состояния C ++ 11 (3.2.3), которые:
Каждая программа должна содержать ровно одно определение каждой нестрочной функции или переменной, которая является odr-используемой в этой программе ; не требуется диагностика. Определение может явно отображаться в программе, оно может быть найдено в стандартной или определяемой пользователем библиотеке или (если необходимо), оно неявно определено (см. 12.1, 12.4 и 12.8). Встроенная функция должна быть определена в каждой единицы перевода, в которой она используется odr.
blockquote>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.