У меня есть неприятная проблема с ошибками компилятора 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» или что-то, чтобы эти ошибки отображались как предупреждения.
Спасибо
Я не уверен на 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;
}
Редактировать:
Если редактирование исходного кода вообще невозможно, вам необходимо проанализировать исходный код, определить неверные фигурные скобки и вывести «правильный» код. Чем больше я думаю об этом, тем меньше я верю, что это вообще возможно исправить без какого-либо редактирования исходного кода. Или что это когда-либо компилируется …
Других решений пока нет …