Игнорирование ошибки GCC: скобки вокруг скалярного инициализатора для типа & quot; ошибки. Сделайте им предупреждения

У меня есть неприятная проблема с ошибками компилятора GCC «ошибка: скобки вокруг скалярного инициализатора для типа». Я видел, что другие жалуются на это, хотя они описывают это как предупреждение (предупреждение gcc: скобки вокруг скалярного инициализатора)

Я компилирую код, который не мой для редактирования, и я получаю много этих ошибок по всему коду.

Базовая модель:

struct t_
{
float f;
int i;
};

float f = { 0.3 };      //Compiler is all happy with this.
int i = {0};            //Compiler is all happy with this too.
t_ t1 = { 0.3, 0 };     //Compiler is all happy with this too.
t_ t2 = { {0.3}, 0 };   //Compiler ERROR: braces around scalar initializer for type 'float'

Я знаю, что могу удалить скобки {} вокруг плавающего скейлера, чтобы устранить эту ошибку, но я не хочу каким-либо образом изменять код. Есть ли флаг, который я могу дать GCC (в настоящее время используется MinGW gcc 4.8.1). то есть «std = c ++ 03» или что-то, чтобы эти ошибки отображались как предупреждения.

Спасибо

1

Решение

Я не уверен на 100%, но я считаю, что такой возможности нет. Имеющаяся у вас конструкция не означает одно и то же в двух случаях: первый — инициализация одной структуры, второй — структура, содержащая структуру или массив. Который конечно float нет.

Вы можете обойти это с

struct t_
{
struct
{
float f;
};
int i;
};

По крайней мере, Clang доволен этим. Как и G ++. Это может быть проще, чем изменять множество операторов инициализации с дополнительными скобками. Но это по общему признанию все еще изменение исходного кода. К сожалению, я уверен, что это необходимо.

Полный пример, с которым я тестировал:

struct t_
{
struct
{
float f;
};
int i;
};t_ t2 = { {0.3}, 0 };int main()
{
t2.f = 7;
}

Редактировать:
Если редактирование исходного кода вообще невозможно, вам необходимо проанализировать исходный код, определить неверные фигурные скобки и вывести «правильный» код. Чем больше я думаю об этом, тем меньше я верю, что это вообще возможно исправить без какого-либо редактирования исходного кода. Или что это когда-либо компилируется …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]