C语言 在Linux内核中不允许函数返回数组

nc1teljy  于 2023-06-28  发布在  Linux
关注(0)|答案(3)|浏览(176)

在克隆Linux内核并在VSCode(带有C CPP扩展)中打开例如/drivers/md/dm-zero. c后,在最后3行给了我一个错误:function returning array is not allowed
当然,我知道这不应该是一个错误,因为我只是克隆,并没有调整任何东西。C CPP扩展中是否有应设置的设置?
谢谢!
编辑:标题有误导性:我知道这与内核本身无关,但我想说明VSCode会抱怨Linux内核源代码中已经编写的内容
Edit 2:具体错误在这3行:不允许函数返回数组C/C++(91)

MODULE_AUTHOR("Jana Saout <jana@saout.de>");
MODULE_DESCRIPTION(DM_NAME " dummy target returning zeros");
MODULE_LICENSE("GPL");

MODULE_AUTHOR例如扩展为

#define __MODULE_INFO(tag, name, info)                    \
    static const char __UNIQUE_ID(name)[]                 \
        __used __section(".modinfo") __aligned(1)         \
        = __MODULE_INFO_PREFIX __stringify(tag) "=" info

我在Ubuntu 20.04中使用GCC

ogsagwnx

ogsagwnx1#

vscode github repo中的这条评论为我解决了这个问题。基本上需要向c_cpp_properties.json文件添加一些显式的include路径和编译器参数。

"includePath": [
  "/usr/src/linux-headers-5.4.0-39-generic/arch/x86/include",
  "/usr/src/linux-headers-5.4.0-39-generic/arch/x86/include/generated",
  "/usr/src/linux-headers-5.4.0-39-generic/include",
  "/usr/src/linux-headers-5.4.0-39-generic/arch/x86/include/uapi",
  "/usr/src/linux-headers-5.4.0-39-generic/arch/x86/include/generated/uapi",
  "/usr/src/linux-headers-5.4.0-39-generic/include/uapi",
  "/usr/src/linux-headers-5.4.0-39-generic/include/generated/uapi",
  "/usr/src/linux-headers-5.4.0-39-generic/ubuntu/include",
  "/usr/lib/gcc/x86_64-linux-gnu/9/include"
],
"compilerArgs": [
  "-nostdinc",
  "-include", "/usr/src/linux-headers-5.4.0-39-generic/include/linux/kconfig.h",
  "-include", "/usr/src/linux-headers-5.4.0-39-generic/include/linux/compiler_types.h"
]
ffvjumwh

ffvjumwh2#

/drivers/md/dm-zero.c
...
在最后3行给我一个错误
我想你是指跟踪吧

MODULE_AUTHOR("Jana Saout <jana@saout.de>");
MODULE_DESCRIPTION(DM_NAME " dummy target returning zeros");
MODULE_LICENSE("GPL");

这些都是宏,如果你挖掘并寻找它们的定义,它们是绝对有效的。你得到的错误是VSCode及其C/C++扩展(不管是什么)的本地错误,因为它无法找到定义。

kninwzqo

kninwzqo3#

我通过在c_cpp_properties.json中添加两个define值来修复这些问题。

"defines": [ "__KERNEL__", "MODULE" ]

相关问题