0

第一次在这里发帖

我目前正在为嵌入式设备移植一些代码。基本上从过时的现有专有编译器中获取所有内容以使用新编译器(AVR-GCC)

我在结构中遇到了这个看起来很奇怪的变量(无论如何对我来说!)。我无法弄清楚括号是什么。它位于用于原始值的结构中:

float   (*tc)( float value );

我的 IDE 将“value”突出显示为编译器关键字,就像“float”一样,所以我不知道这是否是 AVR-GCC 特定的?

然后在一个函数中使用它,该函数有一个名为“reading”的浮点参数,并尝试返回以下内容:

    return (raw[rCN3].tc)( reading );

上面的行实际上导致程序尝试访问越界内存。

我以前从未见过这样的代码,所以想知道是否有人可以帮助我破译它?它适用于旧编译器,但导致 AVR-GCC 出现问题

提前致谢。亚历克斯

4

4 回答 4

1

这是一个函数指针。它指向一个返回浮点值并具有浮点参数的函数。

于 2013-05-29T10:26:45.257 回答
1

两件事情:

1)float (*tc)( float value )是一个function pointer以浮点数为参数的函数,返回一个浮点数

2)'value'是C#中的关键字,也可能是其他语言;因此它的突出显示。检查您的编辑器语言设置。

于 2013-05-29T10:28:17.223 回答
0

那是一个函数指针变量。

tc是一个指向函数的指针,它接受一个float作为参数并返回一个`float.

它访问越界内存的原因可能是因为rCN3数组越界raw

于 2013-05-29T10:26:08.027 回答
0

那是一个函数指针。

这意味着tc保存接受单个float参数并返回float值的函数的地址。

例如,您可以将其设置为标准库的sinf函数,如下所示:

somestruct.tc = sinf;

somestruct.tc(3.14159265f / 2);  /* This will return roughly 1.0f. */

此外,永远有用的cdecl说:

将 tc 声明为指向返回浮点数的函数 (float) 的指针

于 2013-05-29T10:26:15.163 回答