void
представляет собой стандартный тип С, что указывает, что функция не возвращает результат.
__sched
макрос, который расширяется в соответствии с определением, вы цитируемом, делая декларацию, эквивалентную:
static void __attribute__((__section__(".sched.text"))) __schedule(void)
__attribute__
является расширением языка поддерживается GCC (и компиляторы, совместимые с GCC). Его значение задокументировано в gcc manual. Он указывает, что сгенерированный код для функции должен быть помещен в указанный раздел в объектном файле.
С __sched
, или, скорее, последовательность, в которой он распространяется, не является именем типа, между ним и конфликтом нет void
.
(двойные круглые скобки в синтаксисе __attribute__
позволяют Макроопределение как
#define __attribute__(arg)
быть использована, если вы хотите скомпилировать код с помощью компилятора, который не поддерживает это расширение, в результате чего он будет игнорируется, а не рассматривается как синтаксическая ошибка. Некоторые атрибуты принимают несколько аргументов, а перенос всего списка аргументов в дополнительный набор круглых скобок позволяет обрабатывать весь список в отношении препроцессора как один аргумент.)
Оба '__attribute__' и' __section__' покрываются документацией [gcc] (http://gcc.gnu.org/onlin edocs /). Его «поставил меня здесь». Кроме того, поисковый google для google для ["gcc \ _ \ _ atttribute \ _ \ _ \ _ \ _ section \ _ \ _"] (http://forum.kernelnewbies.org/read.php?14,822) расскажет вам в значительной степени * точно *, что вы просите. – WhozCraig
Обязательно используйте 'extern 'C" {} 'для объявления, если вы используете [tag: C++]! –
Вы пишете код C++, который работает в ядре? –