2016-12-09 1 views
1

Pour éviter une situation impossible, on pourrait réduire le problème à deux cas.Existe-t-il un outil qui vérifie quelles macros prédéfinies un fichier C dépend?

Cas 1

Le premier cas (le plus simple) est la situation où le préprocesseur a une chance de le détecter, c'est-il y a une directive préprocesseur qui dépend d'une macro étant prédéfinie (qui est défini avant la première ligne d'entrée) ou non. Par exemple:

#ifdef FOO 
#define BAR 42 
#else 
#define BAR 43 
#endif 

dépend de FOO étant prédéfini ou non. Toutefois, le fichier

#undef FOO 

#ifdef FOO 
#define BAR 42 
#endif 

ne le fait pas. Un cas plus difficile serait de détecter si la dépendance a réellement de l'importance, ce qu'elle ne fait pas dans les cas ci-dessus (car ni ni BAR n'affecte la sortie).


Cas n ° 2

Le second (plus difficile) cas est celui où la compilation réussie dépend de macros prédéfinies:

INLINE int fubar(void) { 
    return 42; 
} 

qui est parfaitement bien dans la mesure où le préprocesseur est concerné si pas ENTRY_POINT est prédéfini, mais à moins que INLINE est soigneusement défini que le code ne compilera pas. De même, nous pourrions dans ce cas exclure des cas où la sortie n'est pas affectée, mais je ne peux pas trouver un exemple de cela. La complication est que dans l'exemple:

int fubar(void) { 
    return 42; 
} 

le fubar étant prédéfini peut modifier la compilation réussie de cela, donc il faudrait probablement restreindre aux cas où un symbole besoin d'être prédéfini afin de compiler avec succès . Je suppose qu'un tel outil serait quelque chose de similaire à un préprocesseur (et C dans le second cas). La question est de savoir s'il existe un tel outil? Ou y a-t-il un outil qui ne gère que le premier cas? Ou pas du tout?

+0

Recs d'outils sont hors sujet, en général, vous le savez, non? –

+0

@SouravGhosh Il ne s'agit pas de la recommandation d'un outil, mais plutôt de l'existence de celui-ci (mais bien sûr pour soutenir une réponse affirmative, un exemple pourrait devoir être donné). – skyking

+0

Pour ceux qui ont recommandé de fermer cette question comme étant une question d'outil: pour que ce soit une question d'outil-rec, il faudrait au moins ** deux ** de tels outils (qui répondraient à la question). S'il n'y a qu'un seul de ces outils, il n'y aurait pas beaucoup de recommandation et s'il n'y a pas un tel outil, lequel recommanderiez-vous? Pensez-vous toujours que vous avez un soutien pour votre affirmation selon laquelle il s'agit d'une question d'outil-rec? Si vous le faites, je voudrais les voir car cela répondrait à la question. – skyking

Répondre

0

En C tout peut être (re) défini, il n'y a donc aucun moyen de savoir à l'avance ce qui est destiné à être (re) défini. Habituellement, certaines conventions de nommage nous aident à comprendre ce qui est censé être une macro (comme une majuscule). Par conséquent, il n'est pas possible d'avoir un tel outil. Bien sûr, si vous supposez que les erreurs de compilation sont causées par des définitions de macros manquantes, vous pouvez les utiliser pour analyser ce qui manque.