五路居网站建设,wordpress php允许上传文件大小,百度助手下载安装,软件开发管理平台你遇到的警告信息#xff1a;
warning: declaration of struct Zero2TenVDrv will not be visible outside of this function [-Wvisibility]这是编译器提示你在某个函数内部声明了一个结构体 struct Zero2TenVDrv#xff0c;但这个结构体的声明作用域仅限于该函数内部…你遇到的警告信息
warning: declaration of struct Zero2TenVDrv will not be visible outside of this function [-Wvisibility]这是编译器提示你在某个函数内部声明了一个结构体 struct Zero2TenVDrv但这个结构体的声明作用域仅限于该函数内部函数外部无法访问它。 产生原因分析
在C语言中结构体的声明如果写在函数内部那么它的作用域仅限于该函数内部外部代码无法使用该结构体类型。这通常不是我们想要的尤其是驱动层结构体通常需要在多个文件或函数间共享。
举个例子
void someFunction()
{struct Zero2TenVDrv {int member1;// ...};// 这里可以使用struct Zero2TenVDrv
}
// 函数外部无法访问struct Zero2TenVDrv解决方案
1. 将结构体声明移到函数外部通常放在头文件或源文件顶部
例如在 Zero2TenV_Driver_internal.h 头文件中
#ifndef ZERO2TENV_DRIVER_INTERNAL_H
#define ZERO2TENV_DRIVER_INTERNAL_Htypedef struct {int member1;// 其他成员
} Zero2TenVDrv;#endif或者如果你需要用 struct Zero2TenVDrv也可以写成
struct Zero2TenVDrv {int member1;// 其他成员
};然后在函数中直接使用
void someFunction()
{struct Zero2TenVDrv drvInstance;// ...
}这样结构体声明对整个文件乃至包含该头文件的其他文件都是可见的。 2. 如果你想隐藏结构体实现细节可以用不完整类型声明前向声明
在头文件中
struct Zero2TenVDrv; // 前向声明在源文件中定义结构体
struct Zero2TenVDrv {int member1;// ...
};这样可以实现封装但前提是外部代码只能通过指针操作该结构体不能访问其成员。 总结
不要在函数内部声明结构体类型否则外部不可见且会产生警告。将结构体声明放在函数外部通常放在头文件中保证多文件共享。如果需要隐藏实现细节使用前向声明和源文件中定义结构体。