函数名作参数的意义
2016-08-30 19:57
225 查看
最近在ARM上调试时犯了一个低级语法错误,错把函数名当作函数返回值了,代码如下:
代码中ObsAvdSignalReceived()是一个函数,返回值为bool类型,表示是否接收到避障信号。
按上述写法发现不管是否接收到信号,总是输出“有障碍”
问题就在于把函数名作为if()语句的条件,函数名代表的是函数地址,用十六进制形式打印:
串口输出如下:
地址为:0x8002e79
这是一个正值,很明显条件恒成立,所以出现上述错误。
另外,编译时会有如下警告:
warning:specified type 'unsigned int' but the argument has type 'uint8_t (*) (void)'
可以看到ObsAvdSignalReceived的类型是返回值为uint8_t,参数为void的函数指针,进一步印证了其实质为函数指针。
结论:写代码时用到函数返回值切记在函数名末尾加上(),表明是返回值。
if(ObsAvdSignalReceived) printf("有障碍\r\n"); else printf("无障碍\r\n");
代码中ObsAvdSignalReceived()是一个函数,返回值为bool类型,表示是否接收到避障信号。
按上述写法发现不管是否接收到信号,总是输出“有障碍”
问题就在于把函数名作为if()语句的条件,函数名代表的是函数地址,用十六进制形式打印:
printf("ObsAvdSignalReceived的地址:%x\r\n",ObsAvdSignalReceived);
串口输出如下:
地址为:0x8002e79
这是一个正值,很明显条件恒成立,所以出现上述错误。
另外,编译时会有如下警告:
warning:specified type 'unsigned int' but the argument has type 'uint8_t (*) (void)'
可以看到ObsAvdSignalReceived的类型是返回值为uint8_t,参数为void的函数指针,进一步印证了其实质为函数指针。
结论:写代码时用到函数返回值切记在函数名末尾加上(),表明是返回值。
相关文章推荐
- listen函数中backlog参数的意义
- 函数:数组名作函数参数
- main()函数参数的意义
- 函数参数名后面加const的意义
- 用数组名作函数参数,此时形参与实参都用数组名
- mmap的详细使用及函数参数意义
- C---数组名作函数参数
- python 图像处理模块函数 thumbnail参数意义
- C++小技巧emun namespace 指针*、&(在函数里做参数) exit与return Win32宏定义 双等号代表意义
- Jmail 参数和函数的意义
- 【Python】函数参数的说明---变量前加星号的意义
- int APIENTRY WinMain( )函数的参数意义
- ExtJs grid 回调函数里Function()参数里的具体意义及如何带参数掉函数
- 函数嵌套和函数名作参数结合使用
- 函数名作参数
- 关于main()函数两个参数的意义和应用
- 用于string对象中字符截取的几种函数总结——语法、参数意义及用途举例
- 【转载】ExtJs grid 回调函数里Function()参数里的具体意义及如何带参数掉函数
- 详解C++编程中用数组名作函数参数的方法
- 双重指针做函数参数的意义