2010-03-24 20 views
7

यह मैक्रोसी ++ मैक्रोज़?

write_foo(A); 
and 
read_foo(); 

परिभाषित करने के लिए संभव है ताकि:

code_block_1; 
hello; 
code_block_2; 
hello; 

code_boock_3; 
world; 
code_block_4; 
world; 

:

WRITE_FOO(hello); 

code_block_1; 

READ_FOO(); 

code_block_2; 

READ_FOO(); 

WRITE_FOO(world); 

code_block_3; 

READ_FOO(); 

code_block_4; 

READ_FOO(); 

में विस्तारित हो?

धन्यवाद!

+0

संभवतः, #pragma push/pop का उपयोग करके और 'डेफिन' को फिर से परिभाषित करने के लिए आपके कोड की तरह दिखाई देगा। मैं आपको और अधिक मदद करने के लिए सी/सी ++ नहीं जानता। – leppie

+4

जब भी कोई मैक्रो के साथ कुछ जटिल करता है, तो मुझे "क्यों?" पूछना होगा। –

उत्तर

4

मैक्रोज़ अन्य मैक्रोज़ को फिर से परिभाषित नहीं कर सकता है, लेकिन आप इसे मैन्युअल रूप से कर सकते हैं।

#define FOO hello 

FOO // expands to hello 

#undef FOO 
#define FOO world 

FOO // expands to world 

#undef FOO 
#define FOO blah 

FOO // expands to blah 

दुर्भाग्य से, #define + #undef संयोजन किसी अन्य संरचना है कि मैं के बारे में पता कर रहा हूँ में समझाया नहीं जा सकता है।

+1

बेशक इसका मतलब यह होगा कि हेडर में हेडर गार्ड नहीं हैं ... –

+0

लेकिन यह ठीक है जब तक यह 'undef' की READ_FOO है। –

+0

क्या सोचो! [किसी ने यह कोशिश की] (http://stackoverflow.com/questions/9526096/c-macro-with- स्मृति) और यह काम नहीं करता है! – Shahbaz

4

यह संभव नहीं है क्योंकि मैक्रो में प्रीप्रोसेसर निर्देश नहीं होना चाहिए।

2

क्या आप वास्तव में के लिए पूछ रहे हैं नहीं है, लेकिन अगर WRITE_FOO एक परिभाषा था आप कुछ इसी तरह मिल सकता है (संदर्भ के बिना मैं सिर्फ नाम का पुन: उपयोग होगा, भले ही वे मंशा पर इतना स्पष्ट नहीं कर रहे हैं):

#define READ_FOO() WRITE_FOO 

#define WRITE_FOO hello 
code...[1] 
READ_FOO(); 
code...[2] 
#define WRITE_ROO world 
code...[3] 
READ_FOO(); 

// will expand to: 
code...[1] 
hello; 
code...[2] 
code...[3] 
world; 
0

यह Cog जैसे उपकरणों के लिए मीठा स्थान है जो पाइथन का उपयोग करके सहज ज्ञान युक्त प्रोग्रामिंग दृष्टिकोण से कोड पीढ़ी की समस्या से संपर्क करते हैं। यह

/*[[[cog 
# definitions ---- 
import cog 
Foo = '' 
def WriteFoo(value): 
    Foo = value 

def ReadFoo(): 
    cog.outl(' %s; ' % Foo) 

# generation --- 
WriteFoo('hello') 
]]]*/ 
//[[[end]]] 

some_code_block; 

/*[[[cog 
ReadFoo() ]]]*/ 
hello; 
//[[[end]]] 

some_other_blocK; 

/*[[[cog 
WriteFoo('world') 
ReadFoo() ]]]*/ 
world; 
//[[[end]]] 


last_block; 
संबंधित मुद्दे