Question

Je travaille avec l'héritage code embarqué C qui définit les types uint8_t, uint16_t et uint32_t dans un fichier d'en-tête en utilisant le mot-clé typedef.

Pour la discussion, laissez-nous dire le fichier typedefs.h contient ces définitions.

Dans mon nouveau module source C, je stdint.h inclus. Je ajoute aussi d'autres fichiers d'en-tête qui comprennent quelque part typedefs.h dans la hiérarchie. Comme prévu, le compilateur se plaint de symboles multiples définis.

Je voudrais modifier le fichier héritage typedefs.h pour qu'il déclare que les types de uint*_t si l'stdint.h ne sont pas inclus ou mieux si les types de uint*_t ne sont pas définis.

Je crois comprendre qu'il #ifndef ne peut pas être utilisé car typedef n'est pas une directive préprocesseur.

Alors, comment puis-je dire au compilateur de ne pas définir le uint*_t si elles existent déjà (ou si le stdint.h est déjà inclus)?

Note:. Ce serait facile si la norme spécification C définie comprennent des définitions de garde pour les fichiers d'en-tête

FWIW, j'utilise le compilateur Green Hills, 4,24, pour un processeur ARM9.

Était-ce utile?

La solution

Il suffit de fixer l'en-tête de l'héritage toujours inclure stdint.h pour obtenir ces types, supprimez les définitions en double, et de fournir une goutte dans le fichier stdint.h pour les systèmes cassés qui en manquent.

Autres conseils

Je beleive que le stdint.h devrait également définir une macro pour les limites des types qu'il définit. Vous devriez être en mesure de tester pour ceux qui utilisent un #ifdef et autres.

#ifndef UINT32_MAX
  typdef ... uint32_t;
  #define UINT32_MAX ...
  ...
#endif

Edit:. A l'origine utilisé UINT32_MIN, mais comme Jens Gustedt poited c'est une combinaison de signé / non signé et min / max qui ne se produit pas

Si vous êtes sur un système UNIX, alors vous devriez sauvegarder une étape et d'utiliser un logiciel de configuration comme autoconf (1) ou automake (1). Il est conçu pour des problèmes de poignée comme celui-ci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top