Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C++] __assume (keyword)

    Dato il seguente codice:

    codice:
    switch( n )
    {
         case 5:
    	n = 5+2;
    	break;
    
        case 6:
    	n = 6+2;
    	break;
    
    
    
         default:
    	__assume( 0 );
    }

    Quali sono le funzionalità di __assume ?

    Da MSDN vengo a conoscenza di quanto segue:
    "The use of assume(0) tells the optimizer that the default case cannot be reached. As a result, the compiler does not generate code to test whether p has a value not represented in a case statement. Note that assume(0) must be the first statement in the body of the default case for this to work.

    Because the compiler generates code based on __assume, that code might not run correctly if the expression inside the __assume statement is false at run time."

    Ma qual'è la relazione che lega la seconda frase alla prima?

    In particolare nel codice (di esempio) da me riportato se l'espressione è false ( __assume( false ) ) e se n, prima dello switch, è diversa sia da 5 che da 6, effettuando il debug si vede come il flusso entri nello switch e in particolare esegua le istruzioni del primo case, qualunque esso sia.

    Se invece l'espressione è true ( __assume( true ) ) l'applicazione si comporta (o cosi sembra) come è riportato da MSDN.

    Delucidazioni?

  2. #2
    Probabilmente:

    __assume( false ): Se l'espressione da verificare non è presente in nessun case, considera come valido il primo ed esegui le sue istruzioni;

    __assume( true ): Se l'espressione da verificare non è presente in nessun case considera il codice del default.


    Correggetemi pure se mi sbaglio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.