gcc编译器各种warning 解决方式

来源:互联网 发布:淘宝店铺招牌源代码 编辑:程序博客网 时间:2024/05/16 09:00

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 无论在函数声明还是定义的时候都要加上!












原创粉丝点击