Detection de cast utilisé en langage C dans du code C++
Bonjour,
Je voudrais savoir si il existe des outils ou même des options dans des compilateurs capables de détecter des cast utilisé en langage C dans du code C++.
J'utilise un analyseur statique de code puissant mais il ne parvient pas à detecter ce genre de cast. Je joins le code suivant qui est archi-faux mais qui compile bien :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
#include <stdio.h>
class TestA {
public:
virtual void Print ( void ) {
printf("TestA [%08X].\n",this);
}
static void Test ( TestA* Class ) {
if (Class)
Class->Print();
else
printf("TestA : NULL passed.\n");
}
} ;
class TestB {
public:
virtual void FunctionDummy ( void ) {
printf("CRASH + CORE !!!! \n");
}
virtual void Test_CastC ( void ) {
// This should show an error of invalid cast/ useless /dangerous
// Devrait montrer une erreur de cast invalide / inutile / dangereux.
// Normalement, crash ici.
TestA::Test((TestA*)this);
}
/* // Don't compile
// Ne compile pas.
virtual void Test_SCastCPP ( void ) {
TestA::Test(static_cast<TestA*>(this));
}
*/
virtual void Test_DCastCPP ( void ) {
// don't crash for an execution if the class TestA checks NULL values
// Ne plante pas à l'exécution si la classe TestA vérifie les valeurs NULL.
TestA::Test(dynamic_cast<TestA*>(this));
}
} ;
int main(int argc, char* argv[]) {
TestA A ;
TestB B ;
int i = 0 ;
A.Print();
A.Test(&A);
A.Test(NULL); // Major crash in the execution => the dynamic_cast in TestA doesn't work (dead code)
// A.Test((TestA*)(&i)); // Crash sévère à l'exécution => le dynamic_cast dans TestA ne sert à rien (code mort).
B.Test_CastC();
// B.Test_SCastCPP();
B.Test_DCastCPP();
return 0;
} |
Si quelqu'un a une idée sur la question ?
Merci