您的位置:首页 > 其它

gcc编译器各种warning 解决方式

2013-05-06 16:24 239 查看
warning: implicit declaration of function 'xxx'(函数的隐式说明)

今天在移植gnu-ucos的时候出现一个问题----warning: implicit declaration of function 'OSCtxSw'

经过在网上搜索发现主要有两种情况会产生这种问题:

1)没有把函数所在的c文件生成.o 目标文件。

2)在函数所在的c文件中定义了,但是没有在与之相关的.h 文件中声明。

这里是第二种情况,但又不全是。通过分析查看发现函数OSCtxSw是在 os_cpu_s.s里面实现的。在这个文件里面还有其它靠汇编实现的函数。在这里需要加一个头文件对这个函数的声明。

在include 目录下增加一个文件 os_cpu_s.h ,里面加入汇编语言文件实现的函数声明

void  OSCtxSw(void);
再次编译没有 warning。 通过

suggest parentheses around arithmetic in operand of '|'

用gcc编译程序遇到如下问题:

warning: suggest parentheses around arithmetic in operand of '|'
//GPG4 is setted as LCD_PWREN
    rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable
提示建议用括号扩住 '|' 运算,修改为如下形式即可:

//GPG4 is setted as LCD_PWREN
    rGPGUP= (rGPGUP&(~(1<<4))) | (1<<4); // Pull-up disable


warning: control reaches end of non-void function

出现这个警告说明 某个函数没有return 一个数值。 而这个函数的返回是非void的.比如说

int add()
{
	///aaa
	///bbb
}
函数返回一个int类型,在函数体内部却没有返回。

warning: function declaration isn't a prototype

如果一个函数没有参数,int hello_init(void) 括号里面没有加void就会出现此警告。 注意这个void 无论在函数声明还是定义的时候都要加上!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: