Я работаю в C89 в довольно ограниченной среде. Я должен писать для компилятора на основе G CC 4.4, но мой код также должен проходить тесты, скомпилированные с G CC 3.2. Наш компилятор для повседневной разработки - G CC 5.4. Для моих денег это звучит безумно, но это те карты, которые мне выдали.
Поскольку нам требуются 64-битные целые числа, мы пошли на ослабление правил C89, чтобы используйте long long
. Наш исходный код решает проблему следующим образом:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wlong-long"
typedef unsigned long long my_type
#pragma GCC diagnostic pop
К сожалению, это не работает с G CC 4.4, поскольку операции pu sh и pop были введены в G CC 4.6. , поэтому я изменил его на:
#pragma GCC diagnostic ignored "-Wlong-long"
typedef unsigned long long my_type
#pragma GCC diagnostic error "-Wlong-long"
Увы, G CC 3.2 не любит:
warning: ignoring #pragma GCC diagnostic
ISO C89 does not support `long long'
warning: ignoring #pragma GCC diagnostic
Видя, что он скомпилирован с -Wunknown-pragmas
, подозреваю, что #pragma GCC diagnostic
не существовало на момент выпуска G CC 3.2.
Кто-нибудь может предложить решение, пожалуйста?