Я пытаюсь написать очень простой кусок кода для класса, но я просто озадачен, почему я не могу его скомпилировать. Извините, если это дублирующий или глупый вопрос, но я не смог найти других, которые ответили бы за меня. Моя полная программа вставлена ниже. Когда я пытаюсь скомпилировать, я получаю следующую ошибку:
test.c: в функции ‘main’:
test.c: 7: 27: ошибка: ожидается ‘;’ перед знаком «{«
Вот код:
#include<stdio.h>
#include<linux/sched.h>
#include<linux/kernel.h>
int main(){
struct task_struct *task;
for_each_process(task){
printf("I found task: %d\n", task->pid);
}
return 0;
}
Я чувствую, что упускаю что-то мучительно очевидное, кто-нибудь может указать, в чем здесь проблема? Я попытался инициализировать объект ‘task’ как NULL и использовать более простой оператор printf, который просто печатает ‘test’, но ничего из того, что я пробовал, не исправило эту ошибку компиляции.
Используемый токен препроцессора for_each_process
либо не определен, либо не определен, чтобы делать то, что вы думаете, что он делает.
Каждому компилятору C ++, который я использовал, можно сказать, чтобы выводить вывод постпроцессинга. Если вы передадите флаг, который делает это при сборке исходного файла, вы увидите код, который компилятор видит и облажается.
gcc -E
clang -E
или /E
флаг в визуальной студии (хе) например.
Как уже упоминал @Ulrich, очевидно, что макрос доступен только внутри ядра. Попытка прочитать <linux/sched.h>
Определить это непросто, так как существует множество пар ifdef / endif.
Макрос был перемещен в <linux/sched/signal.h>
в этом коммите c3edc4010e9d102eb7b8f17d15c2ebc425fed63c в 2017 году. (https://github.com/torvalds/linux/commit/c3edc4010e9d102eb7b8f17d15c2ebc425fed63c).
(Для тех, у кого проблемы с компиляцией по этой причине.)