2013-05-29 5 views
0

первая публикация здесьСтранный поплавок? Указатель на поплавок в структуре

В настоящее время я переношу код для встроенного устройства. В принципе, все, что нужно для работы с новым компилятором (AVR-GCC) из устаревшего существующего компилятора

Я столкнулся с этой странной (по-моему!) Переменной в структуре. Я не могу понять, что это такое с круглыми скобками. Он находится в структуры, которая используется для исходных значений:

float (*tc)(float value); 

Мои IDE основные моменты «значение» в качестве ключевого слова компилятора, так же, как «поплавок», так что я не знаю, если это AVR-GCC конкретнее?

Это затем используется в функции, имеющей поплавок аргумент называется «чтение», и она пытается вернуть следующее:

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

Линия выше на самом деле вызывает программу, чтобы попытаться получить доступ из ограничивающей памяти ,

Я еще не видел такой код, поэтому задавался вопросом, может ли кто-нибудь помочь мне его расшифровать? Он работал со старым компилятором, но вызывает проблему с AVR-GCC

Заранее спасибо. Alex

+2

Это указатель на функцию. См. Http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work –

+0

«Мое значение IDE подчеркивает« как ключевое слово компилятора »<- это не одно из C. Возможно, он использует тот же маркер для нескольких языков. –

+0

BTW: в заявлении есть лишние скобки, 'return raw [rCN3] .tc (чтение);' будет достаточно. – wildplasser

ответ

0

Это переменная указателя на функцию.

tc является указателем на функцию, которая принимает один аргумент float и возвращает `float.

Причина, он получает доступ из Bounds памяти , вероятно потому, чтоrCN3 находится вне границ для массива raw.

+0

Спасибо! Я действительно должен был заметить это ... не использовал указатели функций в течение довольно длительного времени. Спасибо за быстрый ответ –

0

Это указатель на функцию.

Это означает, что tc содержит адрес функции, принимающей один аргумент float, и возвращает значение float.

Например, вы можете установить его в sinf функции стандартной библиотеки, например, так:

somestruct.tc = sinf; 

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

Кроме того, всегда полезная cdecl говорит:

объявить дц как указатель на функцию (float) return float

+0

Отличная ссылка. Огромное спасибо за вашу помощь Я обязательно буду использовать cdecl в будущем :) –

1

Это указатель на функцию. Он указывает на функцию, возвращающую значение float и имеющую параметр float.

1

две вещи:

1) float (*tc)(float value) является function pointer к функции, принимая поплавка в качестве параметра, возвращая поплавком

2) «значение» является ключевым словом в C#, а также может быть в другом языки; следовательно, его подсветка. Проверьте настройки языка редактора.

+0

Спасибо, да, я использую AVR Studio, основанную на Visual Studio, поэтому может быть включена подсветка C#. –

Смежные вопросы