два или более типов данных в спецификаторах объявления для typedef float _Float32; - PullRequest
0 голосов
/ 23 февраля 2019

Я портирую довольно старый C (и немного C ++) код из ОС KEIL в 32-битную версию Linux.

При компиляции с gcc / g ++ с 6.3 до 6.5 все работает нормально, при попыткесделать то же самое с gcc> 7.0 (протестировано с 7.3 и 8.2 на Ubuntu 18.04) Я получаю ошибки компиляции:

/usr/include/bits/floatn-common.h:207:15: error: two or more data types in declaration specifiers
 typedef float _Float32;
               ^~~~~~~~
/usr/include/bits/floatn-common.h:244:16: error: two or more data types in declaration specifiers
 typedef double _Float64;
                ^~~~~~~~
/usr/include/bits/floatn-common.h:261:16: error: two or more data types in declaration specifiers
 typedef double _Float32x;
                ^~~~~~~~~
/usr/include/bits/floatn-common.h:278:21: error: two or more data types in declaration specifiers
 typedef long double _Float64x;

Файл заголовка компилятора (/usr/include/bits/floatn-common.h:261:16) содержит следующую часть:

# if __HAVE_FLOAT32

#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
typedef float _Float32;
#  endif

#  if !__GNUC_PREREQ (7, 0)
#   define __builtin_huge_valf32() (__builtin_huge_valf ())
#   define __builtin_inff32() (__builtin_inff ())
#   define __builtin_nanf32(x) (__builtin_nanf (x))
#   define __builtin_nansf32(x) (__builtin_nansf (x))
#  endif

# endif

Что говорит мне, что это относится только к gcc > 7.0

, большинство проблем, связанных с этой ошибкой, отсутствуют ";"в структурах или что-то вроде

void int myFunction(void){}

, хотя я думаю, что это не тот случай, потому что он появляется в разных единицах компиляции и работает с предыдущими версиями gcc/g++

using glibc version 2.27

Мой вопрос: есть ли способ отключить эту новую функцию компилятора или, в конце концов, намек от сообщества, где начать поиск

1 Ответ

0 голосов
/ 25 февраля 2019

Обнаружена проблема:

Где-то в исходном коде была

#undef __GNUC__

, созданная инструментом генерации неработающего кода ...

Делаяэто, все включения math.h или wchar.h были сломаны ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...