循环函数给出"return’ with a value, in function returning void"误差
looping function giving error of "return’ with a value, in function returning void"
原始代码是
#define MAX_FRAMES 10000
#define MS_BETWEEN_FRAMES CONFIG_FB_MSM_LOGO_ANIMATE_FPS
int load_565rle_image(char *filename, bool bf_supported);
struct delayed_work rle_animate_work;
static void load_565rle_animate(struct work_struct *work)
{
int i, ret = 0, bf_supported = 0;
char filename [20];
struct fb_info *info = registered_fb[0];
set_fs(KERNEL_DS);
printk(KERN_INFO "Starting kernel boot animationn");
for (i = 1; i < MAX_FRAMES; i++) {
sprintf(filename, "/res/bootlogo/%d.rle", i);
ret = load_565rle_image(filename, bf_supported);
sys_unlink(filename);
if (ret == -ENOENT)
break;
info->fbops->fb_open(info, 0);
info->fbops->fb_pan_display(&info->var, info);
msleep(MS_BETWEEN_FRAMES);
}
}
static int __init logo_animate_init(void)
{
INIT_DELAYED_WORK(&rle_animate_work, load_565rle_animate);
schedule_delayed_work(&rle_animate_work, 5 * HZ);
return 0;
}
static void __exit logo_animate_exit(void)
{
return;
}
这使得内核徽标动画化,通过连续加载一系列 *.rle 图像,即 1.rle>2.rle>3.rle>4.rle>5.rle 等。
它最初编写的方式是在到达图像文件名末尾时停止加载这些图像,即如果最后一个文件名是 5.rle,它会停止并停止在那里。基本上我现在要做的是循环,当它到达最后一个文件 (5.rle) 时,它将再次从头开始加载 (1.rle)。
所以我添加了CONFIG_FB_MSM_LOGO_ANIMATE_LOOP
static void load_565rle_animate(struct work_struct *work)
{
int i, ret = 0, bf_supported = 0;
char filename [20];
struct fb_info *info = registered_fb[0];
set_fs(KERNEL_DS);
printk(KERN_INFO "Starting kernel boot animationn");
for (i = 1; i < MAX_FRAMES; i++) {
sprintf(filename, "/res/bootlogo/%d.rle", i);
ret = load_565rle_image(filename, bf_supported);
sys_unlink(filename);
if (ret == -ENOENT)
#ifdef CONFIG_FB_MSM_LOGO_ANIMATE_LOOP
return ret;
#else
break;
#endif
info->fbops->fb_open(info, 0);
info->fbops->fb_pan_display(&info->var, info);
msleep(MS_BETWEEN_FRAMES);
}
}
但是当启用CONFIG_FB_MSM_LOGO_ANIMATE_LOOP时,它会给出编译错误"警告:带有值的'返回',在返回 void [默认启用]的函数中这停止了编译过程。有什么想法吗?
#ifdef CONFIG_FB_MSM_LOGO_ANIMATE_LOOP
return ret;
#else
break;
#endif
这是由预处理器预处理的,并导致在定义CONFIG_FB_MSM_LOGO_ANIMATE_LOOP时从函数返回int ret
。所以
带有值的"return",在函数中返回 void
似乎是相当合理的暗示。
溶液:同时更改函数返回的类型,然后将其更改为:
#ifdef `CONFIG_FB_MSM_LOGO_ANIMATE_LOOP`
return;
#else
break;
#endif
相关文章:
- 将 lambda 表达式传递给 std::function in C++
- 从 std::function in C++ 访问模板化 lambda
- C++ "Invalid use of 'this' in non-member function" ,
- "Warning : No return statement in function returning non-void"是什么意思?
- 如何修复"unresolved external symbol _gladLoadGLLoader referenced in function _main"和"unresolved external
- 使用 VS2017 构建 OpenSSL 后出现一些链接错误。 " OPENSSL_init_ssl referenced in function _main " ?
- 'type_alias<char[N]>{}' VS 'char[N]{}' in function's arguments
- С 错误"s1, s2 are used uninitialised in this function"
- "How to make a recursive call for palindrom numbers without reverse function in c++?"
- LLVM:如何修复"Referring to an argument in another function"
- "Member function must be called or its address taken in function" C++错误
- OpenCV (gamma) in addWeighted function
- 如何修复空虚拟方法的"warning: no return statement in function returning non-void [-Wreturn-type]"
- hash_value function in C++11
- UnsatisfiedLinkError for native cpp function in Android app
- ispunct() Function in C++
- .cpp文件的组合框Scopes和Function in Scope在VS2008 sp2中不起作用.知道为什么这些组合
- sqrt function in C++
- Opencv push_back function in Mat
- Visual Studio 2008 - "Evaluate function" in C++