Это реальный WTF для меня, похоже на ошибку в GCC, но я хотел бы, чтобы сообщество посмотрело и нашел решение для меня.
Вот простейшая программа, которую я мог бы собрать:
#include <stdio.h>
#include <stdint.h>
int main(void)
{
uint16_t i = 1;
uint16_t j = 2;
i += j;
return i;
}
Я пытаюсь скомпилировать это на GCC с флагом -Werror=conversion
, который я использую для большей части моего кода.
Здесь результат:
.code.tio.c: In function ‘main’:
.code.tio.c:9:7: error: conversion to ‘uint16_t {aka short unsigned int}’ from ‘int’ may alter its value [-Werror=conversion]
i += j;
Такая же ошибка для этого кода:
uint16_t i = 1;
i += ((uint16_t)3);
Ошибка
.code.tio.c: In function ‘main’:
.code.tio.c:7:7: error: conversion to ‘uint16_t {aka short unsigned int}’ from ‘int’ may alter its value [-Werror=conversion]
i += ((uint16_t)3);
^
Чтобы быть ясным, ошибка здесь находится в операторе +=
, а не в роли.
Похоже, что перегрузка оператора для +=
с помощью uint16_t
испорчена. Или я пропустил что-то тонкое здесь?
Для использования: MCVE
Изменить: несколько больше:
.code.tio.c:8:6: error: conversion to ‘uint16_t {aka short unsigned int}’ from ‘int’ may alter its value [-Werror=conversion]
i = i + ((uint16_t)3);
Но i = (uint16_t)(i +3);
по крайней мере работает...