Этот простой код:как отключить эту частности Предупреждение
#define WIDTH 500.5
#define NB 23.2
int x[(int)(WIDTH/NB)];
дает мне предупреждение:
prog.c:4:1: warning: variably modified 'x' at file scope [enabled by default]
Если я поставил #define WIDTH 500
и #define NB 23
, предупреждение исчезает.
Передача значения поплавка для WIDTH
макроэкономической оценки компилятором и, таким образом, выдает предупреждение, потому что массив не имеет постоянного размера.
препроцессированный код C выглядит int x[(int)(500.5/23.2)];
, в то время как int x[(int)(500/23)];
ОК для компилятора (значение уже постоянное число)
Я хотел бы найти способ либо
- игнорировать это особое предупреждение (но оставляя другие, так что я могу позволить
-Werror
: кажется, что это безнадежное дело:. GCC, C: Finding out name of default warnings for use in #pragma ignore - исправить код, чтобы он делает то, что я хочу, не выдающего предупреждения
- сила предварительно процессор для выполнения вычислений в виде целого числа
Забавная вещь: компиляция с g++
я не имею предупреждение в то время как я прочитал здесь, что массивы переменной длины официально не поддерживаются в C++, только в C99. Но это не вариант для меня, так как мне нужно придерживаться С.
препроцессор не делает расчет на 500/23 - его компилятор задача – Serge
да, видно после, но это работает. Компилятор видит, что это целая константа. С поплавками, даже отлитые в целые числа, это не так. –
Как и вопрос. Но не вижу возможности принудительно вводить значение с плавающей запятой в целое число во время компиляции, потому что вы пытаетесь работать с неявным преобразованием типа C. Я думаю, что путь был бы окружен этим кодом с помощью «#pragma GCC diagnostic» или любого другого эквивалента вашего компилятора. – tofro