5

我正在尝试为一个类编写一段非常简单的代码,但我对为什么无法编译它感到困惑。抱歉,如果这是一个重复或愚蠢的问题,但我找不到任何其他人为我回答了这个问题。我的完整程序粘贴在下面。当我尝试编译时,出现以下错误:

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;
}

我觉得我错过了一些非常明显的东西,有人能指出这里的问题吗?我尝试将“任务”对象初始化为 NULL 并使用更简单的 printf 语句来打印“测试”,但我尝试过的任何方法都无法修复此编译错误。

4

2 回答 2

8

该宏已<linux/sched/signal.h>在 2017 年的此提交 c3edc4010e9d102eb7b8f17d15c2ebc425fed63c 中移至。(https://github.com/torvalds/linux/commit/c3edc4010e9d102eb7b8f17d15c2ebc425fed63c)。

(对于因为这个原因在编译时遇到困难的人。)

于 2018-10-08T15:46:41.783 回答
1

您正在使用的预处理器令牌for_each_process要么未定义,要么未定义为执行您认为的操作。

我使用的每个 C++ 编译器都可以被告知转储后预处理输出。如果您在构建源文件时传递了导致这种情况发生的标志,您将看到编译器正在查看并搞砸的代码。

gcc -E clang -E/E视觉工作室 (heh) 中的标志,例如。

正如@Ulrich 上面提到的,显然该宏仅在内核中可用。尝试<linux/sched.h>直接阅读并确定这一点具有挑战性,因为有很多很多 ifdef/endif 对。

于 2015-08-24T19:37:23.150 回答