2017-01-01 1 views
2

Je travaille sur une bibliothèque C qui utilise parfoisVous recherchez commande préprocesseur pour supprimer la commande dans le code

static inline void myfunc(...) 

lors de la définition d'une fonction.

Maintenant, j'essaie de porter ce à un ancien compilateur C qui ne supporte pas "statique inline". C'est bcc - le compilateur C de Bruce.

Puis-je utiliser une commande dans un fichier d'en-tête qui remplace

static inline void 

avec

void 

dans tous les programmes qui incluent ce fichier d'en-tête?

+3

Je pense que vous pourriez ajouter une définition vide de void: #define void. –

+0

Etes-vous sûr de vouloir redéfinir le mot clé 'void' et non le mot clé' inline'? Regardez aussi chercher et lire sur * compilation conditionnelle *. –

+0

Désolé, c'était une faute de frappe - Je veux remplacer "static inline void" par "void" – Georg

Répondre

5

Lorsque vous devez cibler un compilateur qui ne prend pas en charge certaines fonctionnalités, il est courant d'utiliser des macros dans votre code plutôt que d'essayer de modifier votre code avec des macros.

Dans cette situation, vous pouvez définir STATIC_INLINE macro d'une manière dépendant du compilateur, et l'utiliser comme ceci:

#ifdef BCC_COMPILER 
#define STATIC_INLINE 
#else 
#define STATIC_INLINE static inline 
#endif 
... 
STATIC_INLINE void myfunc(...) 
+0

Cela fonctionnera, mais j'ai déjà tellement ifdef dans le code. J'espérais que ce serait plus court de le définir en un seul endroit avec une commande #define ou similaire. – Georg

+0

Je comprends maintenant, oui vous pouvez mettre ce code dans le fichier d'en-tête. Est-il possible d'obtenir le préprocesseur pour remplacer "statique inline" avec une chaîne vide? Ensuite, je n'ai pas besoin de changer tous les codes de programme. – Georg

+1

@Georg Malheureusement, le préprocesseur peut remplacer un seul jeton, pas une paire de jetons qui apparaissent côte à côte. C'est pourquoi de nombreuses bibliothèques que j'ai vues utilisent cette astuce, même si cela rend le reste du code moins lisible. – dasblinkenlight

1

Merci beaucoup à tous pour l'aide. Je dois signaler que BLUEPIXY a donné la réponse qui a fonctionné pour moi dans son comment:

#define inline 

Apparemment Cci n'accepte static void mais pas static inline void.

+1

manière d'exprimer cela serait 'Bcc ne supporte pas les fonctions' inline '. Le support de 'static' et' void' est requis même dans les compilateurs C90; 'inline' a été ajouté à C99. –