LINUX.ORG.RU

непонятное поведение ststic const в c


0

0

Доброй ночи

Определяю в функции константы

float get_note_freq(int octave, enum note_names note)
{
static const float h_freq = 440.0;
static const float halftone_delta = 440.0/12;
static const float c_freq = h_freq - halftone_delta*9.0;

компилятор ругается

note.c: In function `get_note_freq': note.c:19: error: initializer element is not constant

Почему он не может вычислить третью константу? Все вроде определено

★★★★★
Ответ на: комментарий от anonymous

>>static убери. Он тут не к месту абсолютно. Не жаба, чай.

Дык, я думал, оно надо, чтобы не создавать эти константы при каждом вызове функции. Или я не прав?

ps: без статиков работает как надо.. А со статиками нет.. Что-то непонятно..

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

смотри -- static здесь семантически означает что оно будет вычислено не в compile-time а в run-time при первом входе в функцию. Значит h_freq и halftone_delta уже не могут быть использованы в constant expression. С другой стороны так как c_freq это const, то инициализатором должна быть constant expression

dilmah ★★★★★
()
Ответ на: комментарий от makoven

я только предположил. А благодарить надо тебя за хороший вопрос.

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.