第一次在这里发帖
我目前正在为嵌入式设备移植一些代码。基本上使用来自过时的现有专有编译器的新编译器(AVR-GCC)来处理所有内容
我在结构中遇到了这个奇怪的样子(对我来说!)变量。我无法弄清楚圆括号是什么。它位于用于原始值的结构中:
float (*tc)( float value );
我的IDE突出显示'value'作为编译器关键字,就像'float'所以我不知道这是否是特定于AVR-GCC的?
然后在具有名为“reading”的float参数的函数中使用它,并尝试返回以下内容:
return (raw[rCN3].tc)( reading );
上面的行实际上导致程序尝试访问越界内存。
我之前没有看过这样的代码所以想知道是否有人可以帮我解读它?它适用于旧的编译器,但导致AVR-GCC出现问题
提前致谢。亚历克斯
答案 0 :(得分:1)
这是一个函数指针。它指向一个返回浮点值且具有float参数的函数。
答案 1 :(得分:1)
两件事:
1)float (*tc)( float value )
是函数的function pointer
,以浮点作为参数,返回浮点数
2)'value'是C#中的关键字,也可能是其他语言;因此它突出了。检查编辑器语言设置。
答案 2 :(得分:0)
这是一个函数指针变量。
tc
是一个指向函数的指针,它接受一个float
作为参数并返回一个`float。
它访问超出内存的原因是可能是,因为rCN3
超出了数组raw
的范围。
答案 3 :(得分:0)