OVH Cloud OVH Cloud

Pourquoi macro MAXINIT definie 2 fois ?

3 réponses
Avatar
Marc Ferry
J'ai deja poste ce mel (en anglais) dans comp.sys.hp, comp.sys.hp.hpux,
comp.lang.c++ et comp.lang.c mais je n'ai pas eu de reponse. Comme le
probleme est susceptible d'etre present sur d'autres OS que HP-UX 10.20,
je le "crosspost" ici, dans l'espoir d'obtenir un conseil.

*************************

Dans les includes systeme d'HP-UX 10.20,
/usr/include/values.h definit la macro MAXINT comme (~HIBITI)
/usr/include/sys/param.h definit la macro MAXINT comme 0x7fffffff

Pourquoi ?

La valeur est la meme au final mais comme mon programme inclue a la fois
values.h et param.h (via des librairies tiers dont je ne maitrise pas
les sources), j'obtiens l'erreur (future) suivante avec aCC:

Error (future) 129: "/usr/include/values.h", line 27 # Redefinition of
macro 'MAXINT' differs from previous definition
at ["/usr/include/sys/param.h", line 45].
#define MAXINT (~HIBITI)
^^^^^^
Warning: 1 future errors were detected and ignored. Add a '+p'
option to detect and fix them before they become fatal errors in a
future release. Behavior of this ill-formed program is not guaranteed to
match that of a well-formed program

Je ne peux pas modifier les librairies tiers. Je ne veux pas supprimer
le warning 129 (option +W129 d'aCC) pour éviter de perdre les autres
erreurs du meme style.

Y-a-t-il uns astuce simple pour éviter cette erreur ?

J'ai remarque que le pb etait partiellement corrige sur HP-UX 11i
puisque values.h definit MAXINT que s'il ne l'ai pas deja:
#ifndef MAXINT
#define MAXINT ((int)(~(unsigned int)HIBITI))
#endif /** MAXINT **/
Je dis partiellement car ce n'est toujours pas la meme definition, meme
si la valeur est la meme au final.

Auriez-vous une piste pour erradiquer ce pb ?
Merci
Marc Ferry

3 réponses

Avatar
Marc Boyer
In article <bme4g5$, Marc Ferry wrote:
*************************
Dans les includes systeme d'HP-UX 10.20,
/usr/include/values.h definit la macro MAXINT comme (~HIBITI)
/usr/include/sys/param.h definit la macro MAXINT comme 0x7fffffff

Pourquoi ?


Par erreur je suppose.

La valeur est la meme au final mais comme mon programme inclue a la fois
values.h et param.h (via des librairies tiers dont je ne maitrise pas
les sources), j'obtiens l'erreur (future) suivante avec aCC:

Error (future) 129: "/usr/include/values.h", line 27 # Redefinition of
macro 'MAXINT' differs from previous definition
at ["/usr/include/sys/param.h", line 45].
#define MAXINT (~HIBITI)
^^^^^^
Warning: 1 future errors were detected and ignored. Add a '+p'
option to detect and fix them before they become fatal errors in a
future release. Behavior of this ill-formed program is not guaranteed to
match that of a well-formed program

Je ne peux pas modifier les librairies tiers. Je ne veux pas supprimer
le warning 129 (option +W129 d'aCC) pour éviter de perdre les autres
erreurs du meme style.

Y-a-t-il uns astuce simple pour éviter cette erreur ?


#include <sys/param.h>
#ifdef MAXINT /* ou #ifndef HP11, ou tout ce aui permet de savoir
qu'on est pas sur HP10 */
#undef MAXINT
#endif
#include <values.h>

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

Avatar
Marc Ferry
Marc Boyer wrote:

In article <bme4g5$, Marc Ferry wrote:

*************************
Dans les includes systeme d'HP-UX 10.20,
/usr/include/values.h definit la macro MAXINT comme (~HIBITI)
/usr/include/sys/param.h definit la macro MAXINT comme 0x7fffffff

Pourquoi ?



Par erreur je suppose.


La valeur est la meme au final mais comme mon programme inclue a la fois
values.h et param.h (via des librairies tiers dont je ne maitrise pas
les sources), j'obtiens l'erreur (future) suivante avec aCC:

Error (future) 129: "/usr/include/values.h", line 27 # Redefinition of
macro 'MAXINT' differs from previous definition
at ["/usr/include/sys/param.h", line 45].
#define MAXINT (~HIBITI)
^^^^^^
Warning: 1 future errors were detected and ignored. Add a '+p'
option to detect and fix them before they become fatal errors in a
future release. Behavior of this ill-formed program is not guaranteed to
match that of a well-formed program

Je ne peux pas modifier les librairies tiers. Je ne veux pas supprimer
le warning 129 (option +W129 d'aCC) pour éviter de perdre les autres
erreurs du meme style.

Y-a-t-il uns astuce simple pour éviter cette erreur ?



#include <sys/param.h>
#ifdef MAXINT /* ou #ifndef HP11, ou tout ce aui permet de savoir
qu'on est pas sur HP10 */
#undef MAXINT
#endif
#include <values.h>

Marc Boyer


Rappel:
Je ne peux pas modifier les emplacements où sont faits les includes de
values.h et param.h puisqu'ils se trouvent qqpart dans les librairies
tiers, dont je n'ai pas les sources.
De plus, cela m'étonnerait fort que les includes se trouvent à la suite.
Sans doute plutôt dans 2 librairies tiers distinctes.

Merci tout de même.


Avatar
Marc Boyer
Marc Ferry wrote:
Marc Boyer wrote:
In article <bme4g5$, Marc Ferry wrote:

Par erreur je suppose.

#include <values.h>

Marc Boyer


Rappel:
Je ne peux pas modifier les emplacements où sont faits les includes de
values.h et param.h puisqu'ils se trouvent qqpart dans les librairies
tiers, dont je n'ai pas les sources.


Si tu as reussit a generer ce message d'erreur, c'est aue tu as les
sources, non ? Si tu n'avais que des binaires, t'aurais pas des problemes
avec les macros.

De plus, cela m'étonnerait fort que les includes se trouvent à la suite.
Sans doute plutôt dans 2 librairies tiers distinctes.


Plusieurs autres pistes alors:
- tracer (c'est long) tous les trucs aui compilent pas, et ajouter
les #undef au cas par cas
- patcher les headers de ton OS
- peut-etre peux-tu installer tes propres versions corrigees des en-tete
et jouer avec l'option -I de ton compilateur pour qu'il utilise tes
versions et pas celles du systeme (mais je sais pas si ca va etre facile)

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(