C'est un vrai WTF pour moi, ressemble à un bug de GCC, mais j'aimerais avoir la communauté ont un coup d'oeil et de trouver une solution pour moi.
Voici le programme le plus simple que j'ai pu rassembler:
#include <stdio.h>
#include <stdint.h>
int main(void)
{
uint16_t i = 1;
uint16_t j = 2;
i += j;
return i;
}
Je suis en train de compiler ce sur GCC avec -Werror=conversion
drapeau, que j'utilise pour une grande partie de mon code.
Voici le résultat:
.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;
Même erreur serait de se passer de ce code:
uint16_t i = 1;
i += ((uint16_t)3);
L'erreur est
.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);
^
Juste pour être clair, l'erreur ici est sur l' +=
opérateur, de ne PAS le casting.
Il ressemble à la surcharge d'opérateur pour l' +=
avec uint16_t
est foiré. Ou ai-je raté quelque chose de subtil ici?
Pour votre utilisation: MCVE
Edit: un peu plus de la même chose:
.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);
Mais i = (uint16_t)(i +3);
au moins des œuvres...