gpt4 book ai didi

c - 警告 : cast to pointer from integer of different size

转载 作者:太空宇宙 更新时间:2023-11-04 08:57:45 24 4
gpt4 key购买 nike

我写了下面的代码:

struct DVDARRAY
{
int length;
pDVD* dvds;
};

typedef struct DVDARRAY DVDARRAY_t;

//...
int main()
{
int i;
char c;
DVDARRAY_t* dvds;
poDAOproperties props;
props = get_dao_properties();
dvds = (DVDARRAY_t*) DVDDAO_read_raw_filter(props, "id = 1");
printf("title->: %s", dvds->dvds[0]->title);
}

在另一个文件中定义了以下内容:

DVDARRAY_t* DVDDAO_read_raw_filter(poDAOproperties properties, char* filter)
{
DVDARRAY_t *dvds;
// ...some code...
dvds = malloc(sizeof(DVDARRAY_t));
// ...some code...
return dvds;
}

现在我的问题是:当我尝试编译这些文件时,我收到以下警告:

src/main.c: In Funktion »main«:
src/main.c:80:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

main.c 的第 80 行正是那一行:

dvds = (DVDARRAY_t*) DVDDAO_read_raw_filter(props, "id = 1");

我能做什么?

最佳答案

您没有在上面列出文件名,所以我将它们称为 main.cdvd.c

main.c 中,您调用了未声明的函数 DVDDAO_read_raw_filter。这告诉编译器假设该函数存在,具有一组未知(但固定)的参数,并且具有 int 类型的返回值。

dvd.c 中,您使用固定(和已知)参数定义函数 DVDDAO_read_raw_filter,返回类型 DVDARRAY_t*。 (大概你必须先重复 DVDARRAY_t 的定义。)

请注意,main.c 认为 DVDDAO_read_raw_filter 有一些不真实的地方,即它具有返回类型 int。这会导致您的编译时诊断。幸运的是(您可以自己决定这是好运还是坏运 :-))尽管存在这种不正确的信念,程序仍成功运行。

要解决此问题,请在调用函数之前告知 main.c 该函数,即声明它。您还可以通过将 -Wimplicit-function-declaration 添加到编译时标志来从 gcc 获得更明确的警告。

通常,将struct 定义、typedef 和函数声明放入头文件(例如,dvd.h) 然后 #include 在各种使用定义和声明的 C 源文件中的头文件。这样编译器就可以将函数声明与函数定义进行比较,并且您无需在多个 中重复 struct 的内容和 typedef 的名称。 c 文件。

关于c - 警告 : cast to pointer from integer of different size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16135130/

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