/ / casting e confusione di conversione intero - c

fusione e confusione di conversione intera - c

mi sento come 6.3.1.3 di standard è già incluso in 6.3.1.8

ma leggendo:

Altrimenti, il nuovo tipo è firmato e il valore non può essere rappresentato dentro; o il risultato è definito dall'implementazione o un viene generato un segnale definito dall'implementazione.

Non è menzionato questo caso lì. Così è 6.3.1.3 per promozioni intere solo e quando c'è il casting qual è l'ordine di conversione. Si tratta di promozione e quindi di casting o casting, promozioni o solo casting.

risposte:

2 per risposta № 1

Ci sono un certo numero di circostanze in cui un compilatore C inserirà il codice per convertire un tipo di dati in un altro. Questi includono conversioni esplicite eseguita dall'operatore di cast e da una varietà di conversioni implicite. Entrambi questi contesti di conversione sono coperti dal §6.3.1:

  1. Diversi operatori convertono automaticamente i valori degli operandi da un tipo all'altro. Questa sottoclaus specifica il risultato richiesto da tale conversione implicita, così come quelli risultanti da un'operazione di cast (a conversione esplicita).

§6.3.1.3 spiega come vengono eseguite le conversioni, senza specificare quando le conversioni sono eseguite. La stessa procedura è utilizzata sia per le conversioni esplicite che per quelle implicite; per eseguire una conversione, è solo necessario conoscere il tipo originale e il tipo desiderato.

§6.3.1.8 spiega come il tipo di destinazione è selezionato in alcuni contesti comuni, senza specificare l'algoritmo per la conversione. Quindi le due clausole sono completamente complementari. Si descrive come viene eseguita una conversione e l'altra descrive quale conversione viene eseguita.

§6.3.1.8 si applica a determinati operatori aritmetici i cui operandi devono essere dello stesso tipo. (Come notato, questa clausola non si applica a tutti operatori aritmetici e devi leggere ildescrizione di ogni singolo operatore per vedere le eccezioni.) Va notato che l'algoritmo per selezionare i tipi di target per entrambi gli operandi produce solo conversioni "allarganti". Il tipo di destinazione è sempre largo o più largo del tipo originale. È possibile che un intero con segno venga convertito in un numero intero senza segno della stessa larghezza, ma un tipo senza segno viene convertito solo in un tipo firmato quando il tipo firmato è sufficientemente ampio da rappresentare tutti i valori del tipo senza segno.

L'implementazione di firmato a non firmatole conversioni sono definite con precisione senza un comportamento definito dall'implementazione in §6.3.1.3p2 ;. Pertanto, il paragrafo §6.3.1.3p3 non si applicherà mai alle conversioni richieste dal §6.3.1.8. Questo vale anche per promozioni intere definito in §6.3.1.1p2, che può essere attivato dall'algoritmo descritto in §6.3.1.8.

In altri contesti in cui avviene la conversione automatica o esplicita, possono essere richieste conversioni restrittive; se l'obiettivo di una conversione restrittiva è firmato, si può applicare §6.3.1.3p3.