gpt4 book ai didi

c - 指针的大小

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:52 25 4
gpt4 key购买 nike

当我的编译器发出警告时,我正在尝试为我的 HTC 手机编译内核:

static ssize_t mipi_dsi_3d_barrier_read(struct device *dev,
struct device_attribute *attr,
char *buf)
{
return snprintf((char *)buf, sizeof(buf), "%u\n", barrier_mode);
}

与消息

warning: argument to 'sizeof' in 'snprintf' call is the same expression as the destination; did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess] error, forbidden warning: mipi_novatek.c:524

我已经修复了一些这样的问题,据我所知 sizeof(buf) 没有意义,因为 buf 作为参数传递,因此编译器不知道缓冲区大小——即使你碰巧传递了一个静态的缓冲区。

事情是,在修复了一些这样的问题之后,我想知道我是否遗漏了什么。我从 github 存储库下载了内核,其中有很多来自“原始”htc 内核的提交,我可以在两者中找到这些错误,所以肯定它对其他人来说编译得很好。

我是不是遗漏了或做错了什么?我正在使用我的 ubuntu 存储库中的 arm-none-eabi-gcc 4.8.2,而不是按照建议从 android.googlesource.com 下载。但无论编译器如何,这都是一个错误,不是吗?您不应该将缓冲区大小作为额外参数传递吗?

编辑 同一内核中的另一个这样的例子......

struct msm_adsp_module *module;

...

if (!strncmp(module->name, "QCAMTASK", sizeof(module->name)))
module_irq_cnt[1]++;
else if(!strncmp(module->name, "VFETASK", sizeof(module->name)))
module_irq_cnt[2]++;
else if(!strncmp(module->name, "VIDEOENCTASK", sizeof(module->name)))
module_irq_cnt[3]++;

在哪里

struct msm_adsp_module {
struct mutex lock;
const char *name;
...

最佳答案

糟糕,抱歉,刚刚从另一个线程中漏掉了它,这使得问题非常清楚

snprintf error. argument to sizeof is the same as destination

in gcc 4.8 documentation, they are talking about this issue: they say:

The behavior of -Wall has changed and now includes the new warning flag -Wsizeof-pointer-memaccess. This may result in new warnings in code that compiled cleanly with previous versions of GCC.

所以我猜这肯定是一个错误,而其他人恰好使用了较旧的编译器。我简直不敢相信生产内核上有这样的代码......

关于c - 指针的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40095901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com