J'ai une longue liste de constantes que j'ai besoin d'accéder à plusieurs projets dans différentes langues (Verilog, C, C ++ et C #). Plutôt que de les répéter dans chaque langue, y a-t-il un bon moyen de les partager? p>
La seule chose à laquelle je pourrais penser serait un fichier texte et un script de prétraitement? Est-ce la meilleure solution ou y a-t-il quelque chose de plus facile / plus élégant? P>
6 Réponses :
Vous pourriez avoir un fichier xml code> avec les constantes à partager et l'avoir analysé dans chaque langue. P>
Cela vous donnera des valeurs d'exécution et ne compilez pas les constantes de temps.
Un script de prétraitement qui met à jour automatiquement ces constantes de votre code est probablement la meilleure méthode. Engagez le code avec votre projet pour assurer l'exactitude et faites-la faire une partie du script de construction. P>
C'est ce que nous faisions à mon emploi précédent (mélange C, VHDL, Assembleur et Matlab). Notez que les cas spéciaux montaient rapidement cependant, si vous voulez faire quelque chose de plus compliqué que de simples constantes entières (par exemple, être capable de spécifier des choses dans Hex, des constantes définies en termes d'autres).
Vous pouvez les conserver dans un document XML et écrire des scripts XSLT pour chaque langue pour générer les fichiers source appropriés dans chaque construction. p>
Je pense que c'est une solution superbe - cela permettrait également une manipulation des cas spéciaux. Et c'est extensible.
Pouvez-vous utiliser votre maquillage (ou votre équivalent) pour définir ces constantes? Pour C et C ++. Vous pouvez utiliser les options CLI du compilateur pour définir les valeurs de pré-processeur pour les constantes. Je n'ai pas beaucoup fait de la personnalisation de la ville pour Verilog, mais je soupçonne que quelque chose de similaire pourrait exister aussi. P>
Vous pouvez écrire un fichier simple sous la forme de , puis appliquez quelque chose comme, pour C: p> Vous pouvez faire une lexer / analyseur dans Flex. / Bison pour analyser le fichier de configuration. Ce sera plus clair et plus facile à étendre. P> p> S / \ ([A- za-z] [A-za-z1-9 _] * \ \) [\ t] * = [\ t] * \ \ \ \ \ \ \ \) / # Définir \ 1 \ 2 / code> p> < P> Sa meilleure valeur que vous devriez avoir besoin de spécifier des types, car toutes les langues ne vous permettront pas d'utiliser une macro pré-comprimé qui ne se soucie pas du type. P>
Pour Verilog (au moins pour le système Verilog) et C ++, vous pouvez avoir toutes les constantes décrits comme une liste (en supposant que tous sont du même type), comme les suivantes:
#ifdef CPP const int #elsif VERILOG parameter int #elsif CSHARP class Constants { const int #endif a = 0, c = 1, d = 2; #ifdef(CSHARP) }; #endif
Dupe partiel de: Stackoverflow.com/Questtions/954321/...