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
出现这个警告说明 某个函数没有return 一个数值。 而这个函数的返回是非void的.比如说
int add() { ///aaa ///bbb }函数返回一个int类型,在函数体内部却没有返回。
warning: function declaration isn't a prototype
如果一个函数没有参数,int hello_init(void) 括号里面没有加void就会出现此警告。 注意这个void 无论在函数声明还是定义的时候都要加上!