Ben*_*Ben 4 c++ process-management linux-kernel
我正在尝试为一个类编写一段非常简单的代码,但我只是不明白为什么我不能编译它。对不起,如果这是一个重复或愚蠢的问题,但我找不到任何其他人为我回答了这个问题。我的完整程序粘贴在下面。当我尝试编译时,出现以下错误:
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;
}
Run Code Online (Sandbox Code Playgroud)
我觉得我错过了一些非常明显的东西,有人能指出这里的问题吗?我尝试将“任务”对象初始化为 NULL 并使用一个更简单的 printf 语句来打印“测试”,但我尝试过的任何内容都无法修复此编译错误。
该宏已<linux/sched/signal.h>在 2017 年的此提交中移至 c3edc4010e9d102eb7b8f17d15c2ebc425fed63c。(https://github.com/torvalds/linux/commit/c3edc4010e9d102eb7b8f17d15c2eb6c)。
(对于因此而在编译时遇到问题的人。)
您正在使用的预处理器标记for_each_process要么未定义,要么未定义为执行您认为它执行的操作。
我使用过的每个 C++ 编译器都可以被告知转储后预处理输出。如果您在构建源文件时传递使这种情况发生的标志,您将看到编译器正在看到并搞砸的代码。
gcc -E clang -E或者/E例如 Visual Studio 中的标志(呵呵)。
正如@Ulrich 上面提到的,显然该宏仅在内核中可用。尝试直接读取<linux/sched.h>并确定这一点具有挑战性,因为有很多很多 ifdef/endif 对。