Синтаксис объявления функции C - почему это работает?

Я просматривал некоторый пример кода RTOS (немного устаревшая версия Keil RTX, если кому-то интересно) и наткнулся на непонятный мне синтаксис:

void job1 (void) __task;
void job2 (void) __task;

Это выдавало ошибки (ошибка: #130: ожидалось "{"), поэтому код примера изменился на это:

void __task job1 (void);
void __task job2 (void);

И вдруг файл компилируется. Я думал, что объявления функций — это просто возвращаемый тип, имя и аргументы. Что такое __задача? Мне не удалось найти определение __task, потому что проект неправильно создает файл карты, и я подозреваю, что мне также может не хватать файла.


person 23ChrisChen    schedule 01.07.2014    source источник
comment
Может это макрос? например, если бы он был определен #define __task *, я думаю, что он скомпилировался бы.   -  person Michael Dorst    schedule 01.07.2014


Ответы (2)


Это не C, это расширение компилятора Keil для C.

Ключевое слово _task указывает компилятору не добавлять код входа и выхода функции.

Прочитайте документацию вашего компилятора, чтобы получить больше информации.

person ouah    schedule 01.07.2014

http://www.sase.com.ar/2012/files/2012/09/RLarmSteps.pdf

Описание программы:

  1. Мы создадим простую программу из трех задач, используя RTX.

  2. Task1 и Task2 будут переключать две соответствующие глобальные переменные.

  3. Задача инициализации будет использоваться для создания задач 1 и 2, а затем самоудаляется и исчезает.

  4. Task1 и Task2 будут выполняться последовательно в циклическом режиме навсегда. Задачи создаются как стандартные функции C.

Ключевое слово __Task указывает компилятору не создавать код входа и выхода для задач. RTX сделает это.

(поиск Google: https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=__task%20keyword%20c%20rtos)

person MK.    schedule 01.07.2014