Баг ли это. arithmetic overflow in constant expression - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Существует компилятор для микроконтроллеров MPLAB® XC8 C COMPILER. Начиная с некоторой версии он выдаёт предупреждения

arithmetic overflow in constant expression

на такой код (на последнюю строчку)
#define PROG_VERSION    12345
 
      unsigned char bLow;
      bLow=(unsigned char)(PROG_VERSION & 0xFF);
и даже на такой код
#define PROG_VERSION    12345
 
      unsigned char bLow;
      bLow=(unsigned char)PROG_VERSION;
но на такой нет
#define PROG_VERSION    12345
 
      unsigned char bLow;
      static const int i = PROG_VERSION;
      bLow=(unsigned char)(i & 0xFF);
На других С компиляторах, например gcc, такого предупреждения не получить. Как избавится от предупреждения было найдено тут. Интересует соответствие со стандартом С, есть какие то предпосылки выдавать предупреждение, или это следует считать багом компилятора?

Решение задачи: «Баг ли это. arithmetic overflow in constant expression»

textual
Листинг программы
#define PI 3.1415

Объяснение кода листинга программы

В данном коде определен макроопределение PI, которое равно 3.1415. Это макроопределение будет использоваться в дальнейшем коде для выполнения математических операций, связанных с Пи-числом. Вот список элементов кода:

  1. #define PI 3.1415 - Определение макроопределения PI, равного 3.1415.
  2. ... - Далее в коде будут использоваться макроопределение PI для выполнения математических операций. Пожалуйста, уточните, если вам нужно больше информации.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5