Все остальные ответы верны, но только для завершения
Функция объявляется следующим образом:
return-type function-name(parameter-list,...) { body... }
return-type - тип переменной, возвращаемый функцией. Это не может быть тип массива или тип функции. Если не задано, тогда предполагается int.
имя функции - это имя функции.
parameter-list - список параметров, которые функция разделяет запятыми. Если параметры не заданы, то функция не принимает никаких и должна быть определена с пустым набором скобок или с ключевым словом void. Если переменный тип не находится перед переменной в списке paramater, предполагается int . Массивы и функции не передаются в функции, а автоматически преобразуются в указатели. Если список завершен с помощью многоточия (, ...), то нет заданного количества параметров. Примечание: заголовок stdarg.h может использоваться для доступа к аргументам при использовании многоточия.
И снова ради полноты. Из спецификации C11 6: 11: 6 (страница: 179)
Использование деклараторов функций с пустыми скобками (не деклараторы типа параметра прототипа) является устаревшим особенность.
Это довольно понятно. Если P
имеет какое-либо значение больше 7
(7 * 4 = 28, макс. 31), значение F_MASK_4_BIT << (P * 4)
будет переполнено. Потому что F_MASK_4_BIT
является целочисленной константой типа int
.
Исправьте это, используя соответствующий тип для целочисленной константы:
#define F_MASK_4_BIT 0xFull