Elmoricq Modérateur
| Je suis en train de développer une surcouche à la ctlib, l'API Sybase que je trouve particulièrement mal fichue (ils ont remplacé la dblib, qui était pas mal du tout, par cette infâmie, ça c'est de l'évolution).
Bon, bref.
Dans ma surcouche, je me décide de configurer une connexion standard, en ajustant un certain nombre de paramètres. Or suivant les versions, tous les paramètres ne sont pas connus, je pensais donc utiliser le préprocesseur, par exemple :
Code :
CS_INT properties[][2] = { {CS_ANSI_BINDS, CS_TRUE}, {CS_NETIO, CS_SYNC_IO}, {CS_NO_TRUNCATE, CS_TRUE}, #if CS_CURRENT_VERSION > CS_VERSION_100 {CS_EXTERNAL_CONFIG, CS_FALSE}, #endif {NULL, NULL} };
|
Seulement voila, avec cet exemple, cc il est pas content (missing operator, qu'il me dit).
J'ai cherché, et j'ai trouvé pourquoi : toutes les macros Sybase sont définies avec un cast.
Et les casts le préprocesseur il ne connait pas, d'où non-compilation.
Exemple :
#define CS_VERSION_125 (CS_INT)12500 |
Questions :
- y a-t-il une bonne raison, qui m'échapperait, pour qu'un cast soit imposé pour chaque macro possible et imaginable, et notamment pour un numéro de version ? (je suis sérieux : avant de hurler que c'est de la merde, je veux être sûr qu'il n'y a pas une bonne raison derrière)
- A part se passer du préprocesseur (ce qui dans mon cas va un peu alourdir le code), y a moyen de circonvenir à ce comportement ?
|