在我的程序中使用for_each_process()阻止我编译,编译器说分号预期?

时间:2015-08-24 19:02:27

标签: c++ linux-kernel process-management

我试图为一个类编写一段非常简单的代码,但我只是难以理解为什么我无法编译它。很抱歉,如果这是一个重复或愚蠢的问题,但我无法找到任何其他人为我解答这个问题。我的完整程序粘贴在下面。当我尝试编译时,我收到以下错误:

  

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

我觉得我错过了一些非常明显的东西,有人能指出这里的问题是什么吗?我已经尝试初始化“任务”#39;对象为NULL并使用更简单的printf语句,只打印&#39; test&#39;,但我尝试过的任何内容都修复了这个编译错误。

2 个答案:

答案 0 :(得分:0)

您正在使用for_each_process的预处理程序令牌未定义,或未定义为执行您认为的操作。

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

例如,

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

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

答案 1 :(得分:0)

宏已在2017年提交的c3edc4010e9d102eb7b8f17d15c2ebc425fed63c提交中移至my_fun <- function(x) { if_else(any(!is.na(x)), na.exclude(x)[1], NA_character_) } 。(https://github.com/torvalds/linux/commit/c3edc4010e9d102eb7b8f17d15c2ebc425fed63c)。

(针对因该原因而无法编译的人。)