ВНОВЬ РЕДАКТИРОВАТЬ
Если вы следуете стандарту букве, тогда да, вам следует избегать выражений с плавающей точкой.В C, за единственным исключением констант с плавающей точкой, приведенных к целым числам (таким как (int)3.0f
), выражения с плавающей точкой не рассматриваются как целочисленные константные выражения во время компиляции с целью вычисления размера массива.Вам нужно изменить определение, чтобы избежать чисел с плавающей запятой и использовать исключительно целые числа.
Чтобы не быть массивом переменной длины, размеры массива должны быть «целочисленными константными выражениями» (C99 §6.7.5.2/ 4), и «целочисленное константное выражение» определено в §6.6 / 6 (выделено мной):
целочисленное константное выражение 96) должен иметь целочисленный тип и иметь только операнды, которые являются целочисленными константами, константами перечисления, символьными константами, sizeof
выражениями, результаты которых являются целочисленными константами, и плавающими константами, которые являются непосредственными операндами приведений .Операторы приведения в выражении с целочисленной константой должны преобразовывать только арифметические типы в целочисленные типы, кроме как в качестве части операнда к оператору sizeof
.
Похоже, что GCC только добавил это предупреждение в версии 4.5.В 4.4 и ниже он не сообщает о каких-либо предупреждениях для этого кода, даже с -Wall -Wextra -ansi -pedantic
.Однако, чтобы быть безопасным и переносимым на 100%, вы должны изменить определение DELAY_CYCLES
, чтобы избежать выражений с плавающей точкой.