Bonjour,
J'ai lu je ne sais plus où (ou en tout cas j'ai ça en tête) que le test
Code C/C++ :
if( x || y || z) paf( ) ;
est en fait la même chose que :
Code C/C++ :
if( x )
if( y )
if( z )
paf( ) ;
J'ai donc créé un code de test qui est le suivant :
Code C/C++ :
#include "stdafx.h"
int Test( ) { return ( rand( ) % 10 ) ; }
int randTest = rand( ) % 2 ;
int _tmain(int argc, _TCHAR* argv[])
{
if( randTest || Test( ) ) printf( "test" ) ;
return 0;
}
Et que j'ai ensuite décompilé :
Code :
.text:00401000 _wmain proc near ; CODE XREF: ___tmainCRTStartup+10Ap
.text:00401000 cmp dword_403370, 0
.text:00401007 jnz short loc_40101B
.text:00401009 call ds:rand
.text:0040100F cdq
.text:00401010 mov ecx, 0Ah
.text:00401015 idiv ecx
.text:00401017 test edx, edx
.text:00401019 jz short loc_401029
.text:0040101B
.text:0040101B loc_40101B: ; CODE XREF: _wmain+7j
.text:0040101B push offset Format ; "test"
.text:00401020 call ds:printf
.text:00401026 add esp, 4
.text:00401029
.text:00401029 loc_401029: ; CODE XREF: _wmain+19j
.text:00401029 xor eax, eax
.text:0040102B retn
.text:0040102B _wmain endp
Donc tout va bien. Mais ma question est la suivante : Est-ce que c'est un comportement sur lequel on peut compter ? Est-on sûr, est-ce un standard ou quoi que ce soit ? Parce que si un jour je tombe sur un compilateur qui fait par exemple les tests à l'envers et que lors de l'écriture du code je compte sur le comportement inverse... ouch :)
Je pense en particulier à un code de fonction dans une classe qui testerai si la classe est initialisée et qui tenterai de l'initialiser si elle ne l'est pas :
Code C/C++ :
void CUneClasse::UneFonction( )
{
if( m_bDejaInitialise || this->Initialise() ) etc...
}
Bien sûr tout ceci est une question de culture, je pourrai évidemment écrire :
Code C/C++ :
if( !m_bDejaInitialise ) this-> Initialise( ) ;
if( m_bDejaInitalise ) etc...
Merci à vous.
G0ss3Yn
