deja, pour faire sortir un message durant la compilation, un #pragma message() fera l´affaire
ensuite, plusieurs solutions, plus ou moins propres ou adaptees :
- si tu utilises un vieux VC++, un message contenant le mot "error" sera traite comme une erreur et ne permettra pas a la compilation de terminer proprement (en apparence... le binaire etant quand meme genere)
- rien ne t´empeche de faire des #if/#endif/etc pour tout simplement sortir du code invalide qui va forcement planter la compilation ; c´est pas propre, mais avec un message d´erreur pour decrire le pb, on se rapproche. Ex :
- define TEST 10
- if (TEST > 5)
- define STR_(x) #x
- define STR(x) STR_(x)
- pragma message("ERROR " __FILE__ " " STR(__LINE__) " blah bla")
OuCestCrade
- endif
- en allant un peu plus loin, tu peux faire un module .cpp qui va s´occopuer uniquement de definir les valeur de preproc, et n´inclure les autres fichiers sources et le point d´entree que si les valeurs passent les tests que tu definis ; sinon tu remplaces par un main qui ne fait rien, avec un msg d´erreur par ex.. Tu as donc un programme qui compile, mais si les valeurs sont fausses, ben ca te dit pourquoi a la compile et au runtime
- tu peux aussi utiliser des __debugbreak (= __asm { int 3 } si ca parle a certains) pour attirer l´attention du programmeur a certains endroits du code.
Ex, si une valeur doit pas etre > 10 par ex, tu peux definer un symbole qui va compiler un __debugbreak LA ou dans le code la valeur erronee va faire planter le truc. I.e :
- define TEST 15
....
- if TEST > 10
- define CA_VA_CRASHER_A_CAUSE_DE_TEST
- pragma message("ca va crasher bla bla")
- endif
....
- ifdef CA_VA_CRASHER_A_CAUSE_DE_TEST
__debugbreak();
// j´avais prevenu que ca allait crasher
- endif
{ code utilisant TEST }
avec un truc comme ca, le programmeur qui definit une mauvaise valeur est informe a la compile, et a l´execution ca l´amene la ou cette valeur pose pb
=> y´a plein d´autres variantes plus ou moins propres... mais perso je changerais d´approche : tu fous les valeurs dans un fichier texte que tu parses a l´init, si des valeurs sont pas convenables, tu le signales au runtime et tu abortes l´algo en terminant de maniere anticipee le programme. Gros avantage : c´est plus propre, plus souple, pas besoin de recompiler, n´importe qui peut changer le fichier texte, etc.