Ho un progetto C++ che compilo sia usando g++
sulla mia macchina (compilando su "host") sia con un processore ARM usando un cross-compilatore (nel mio caso arm-cortex_a8-linux-gnueabi-g++
). Sono in fase di conversione in C++ 0x/11 standart e non v'è un errore che ottengo quando si compila la lista di inizializzazione, che sono stato in grado di riprodurre nel seguente frammento:"Restringimento della conversione da 'int' a 'char' all'interno di {}" per valori legali durante la compilazione incrociata
int main(void) {
char c[1] = {-108};
}
Questo programma è apparentemente corretta come -108
è un valore legale per char
. Compilazione questo con g++
cede nessun errore con la seguente riga di comando:
g++ example.cc -std=c++0x
Tuttavia, quando compilo con il cross-compilatore, in questo modo:
arm-cortex_a8-linux-gnueabi-g++ example.cc -std=c++0x
ottengo il seguente errore:
example.cc: In function 'int main()':
example.cc:2:22: error: narrowing conversion of '-0x0000000000000006c' from 'int' to 'char' inside { } [-fpermissive]
Poiché il valore è legale, questo sembra un bug. Puoi spiegare perché ottengo questo errore e cosa devo fare per risolverlo?
Modifica: nota che l'utilizzo di valori positivi (ad es., 108
) è legale e non genera un errore su entrambi i compilatori.
'char' potrebbe essere non firmato sulla piattaforma di destinazione. Puoi controllare? – Brian
@ Brian, come posso verificarlo? –
@AndyThomas 'std :: is_signed'? O, in modo rustico, 'char (-1) <'\ 0'' –
Columbo