2010-08-23 30 views
8

मेरे पास स्थिरांक की एक लंबी सूची है कि मुझे विभिन्न परियोजनाओं (वेरिलोग, सी, सी ++ और सी #) में कई परियोजनाओं तक पहुंच की आवश्यकता है। प्रत्येक भाषा में उन्हें दोहराने की बजाय, क्या इन्हें साझा करने का कोई अच्छा तरीका है?भाषाओं भर में स्थिरांक

एकमात्र चीज जो मैं सोच सकता हूं वह एक टेक्स्ट फ़ाइल और प्रीप्रोकैसिंग स्क्रिप्ट होगी? क्या यह सबसे अच्छा समाधान है या क्या कुछ आसान/अधिक सुरुचिपूर्ण है?

+0

आंशिक शिकार: http://stackoverflow.com/questions/954321/is-it-possible-

वास्तव में, सभी समान मैं शायद सीपीपी का उपयोग फ़ाइल मैं की जरूरत है उत्पन्न करने के लिए होगा बनाने के लिए टू-शेयर-एन-एनम-घोषणा-बीच-सी-एंड-अप्रबंधित-सी –

उत्तर

0

आपके पास XML फ़ाइल हो सकती है जो स्थिरांक के साथ साझा की जा सकती है और इसे प्रत्येक भाषा में पार्स किया जा सकता है।

+1

जो आपको रनटाइम मान देगा, संकलन-समय स्थिरांक नहीं। –

+10

एक्सएमएल हिंसा की तरह है: यदि यह काम नहीं करता है, तो और अधिक उपयोग करें। –

9

एक प्रीप्रोकैसिंग स्क्रिप्ट जो आपके कोड के भीतर स्वचालित रूप से उन स्थिरांक को अपडेट करती है, शायद सबसे अच्छी विधि है। शुद्धता सुनिश्चित करने के लिए अपने प्रोजेक्ट के साथ कोड को प्रतिबद्ध करें और इसे बिल्ड स्क्रिप्ट का हिस्सा बनाएं।

+0

यही वह है जो हम अपने पिछले काम (सी, वीएचडीएल, असेंबलर और मैटलैब मिश्रण) में करते थे। ध्यान दें कि विशेष मामलों में तेजी से बढ़ोतरी होती है, हालांकि यदि आप सरल पूर्णांक स्थिरांक से कुछ अधिक जटिल करना चाहते हैं (उदाहरण के लिए हेक्स में चीजों को निर्दिष्ट करने में सक्षम होना, दूसरों के संदर्भ में परिभाषित स्थिरांक)। –

+0

एम 4 मैक्रो प्रोसेसर अच्छी तरह से एक अच्छा विकल्प हो सकता है। – caf

6

आप उन्हें एक XML दस्तावेज़ में रख सकते हैं और प्रत्येक भाषा में उपयुक्त स्रोत फ़ाइलों को उत्पन्न करने के लिए प्रत्येक भाषा के लिए एक्सएसएलटी स्क्रिप्ट लिख सकते हैं।

+0

मुझे लगता है कि यह एक शानदार समाधान है - यह विशेष केस हैंडलिंग को भी अनुमति देगा। और यह एक्स्टेंसिबल है। – JBRWilkinson

1

क्या आप इन स्थिरांक को परिभाषित करने के लिए अपने मेकफ़ाइल (या समतुल्य) का उपयोग कर सकते हैं? सी और सी ++ के लिए। आप स्थिरांक के लिए प्री-प्रोसेसर मानों को परिभाषित करने के लिए कंपाइलर के सीएलआई विकल्पों का उपयोग कर सकते हैं। मैंने वेरिलोग के लिए बहुत अधिक अनुकूलन नहीं किया है, लेकिन मुझे संदेह है कि वहां कुछ ऐसा ही मौजूद हो सकता है।

1

आप

const1 = value1 
const2 = value2 
const3 = value3 

के रूप में एक सरल फ़ाइल लिख सकते हैं और फिर कुछ की तरह लागू होते हैं, ग के लिए:

s/\([a-zA-Z][a-zA-Z1-9_]*\)[ \t]*=[ \t]*\(.*\)/#define \1 \2/

ध्यान देने योग्य बात है कि आप क्योंकि प्रकार निर्दिष्ट करने के लिए आवश्यकता हो सकती है इसके लायक सभी भाषाओं में आपको प्रीप्रोसेसर मैक्रो का उपयोग करने की अनुमति नहीं दी जाएगी जो कि प्रकार की परवाह नहीं करता है।

वैकल्पिक रूप से, आप कॉन्फ़िगरेशन फ़ाइल को पार्स करने के लिए फ्लेक्स/बाइसन में एक लेक्सर/पार्सर बना सकते हैं। यह विस्तार करने के लिए स्पष्ट और आसान होगा।

0

Verilog (कम से कम प्रणाली Verilog के लिए) और सी के लिए ++ आप सभी स्थिरांक एक सूची के रूप में वर्णित किया है सकते हैं (यह सोचते हैं कि उन सभी को एक ही प्रकार के कर रहे हैं), निम्नलिखित की तरह:

a=0, b= 1, c = 2, ..; 
ग में

++ आप का प्रयोग करेंगे

const int 
#include <myconsts> 
Verilog (कम से कम प्रणाली Verilog में) में

आप इस

parameter int 
`include "myconsts" 
उपयोग कर सकते हैं

मुझे लगता है कि सी # में शामिल नहीं है। इसलिए, आपको कक्षा में अपने स्थिरांक को कम से कम शामिल करने के लिए वहां प्री-पोकोकैसिंग स्क्रिप्ट की आवश्यकता होगी। आप इसके लिए 'सीपीपी' का उपयोग करने में सक्षम हो सकते हैं। क्षमा करें, सी # के बारे में ज्यादा नहीं पता। की

#ifdef CPP 
    const int 
#elsif VERILOG 
    parameter int 
#elsif CSHARP 
    class Constants { 
     const int 
#endif 

    a = 0, 
    c = 1, 
    d = 2; 

#ifdef(CSHARP) 
    }; 
#endif 
संबंधित मुद्दे