Использование for_each_process () в моей программе не позволяет мне компилироваться, компилятор говорит, что точка с запятой ожидается?

Я пытаюсь написать очень простой кусок кода для класса, но я просто озадачен, почему я не могу его скомпилировать. Извините, если это дублирующий или глупый вопрос, но я не смог найти других, которые ответили бы за меня. Моя полная программа вставлена ​​ниже. Когда я пытаюсь скомпилировать, я получаю следующую ошибку:

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’, но ничего из того, что я пробовал, не исправило эту ошибку компиляции.

1

Решение

Используемый токен препроцессора for_each_process либо не определен, либо не определен, чтобы делать то, что вы думаете, что он делает.

Каждому компилятору C ++, который я использовал, можно сказать, чтобы выводить вывод постпроцессинга. Если вы передадите флаг, который делает это при сборке исходного файла, вы увидите код, который компилятор видит и облажается.

gcc -E clang -E или /E флаг в визуальной студии (хе) например.

Как уже упоминал @Ulrich, очевидно, что макрос доступен только внутри ядра. Попытка прочитать <linux/sched.h> Определить это непросто, так как существует множество пар ifdef / endif.

0

Другие решения

Макрос был перемещен в <linux/sched/signal.h> в этом коммите c3edc4010e9d102eb7b8f17d15c2ebc425fed63c в 2017 году. (https://github.com/torvalds/linux/commit/c3edc4010e9d102eb7b8f17d15c2ebc425fed63c).

(Для тех, у кого проблемы с компиляцией по этой причине.)

0

По вопросам рекламы [email protected]