2010-06-05 17 views
5

मैं इस तरह के एक सी में परिभाषित लिखने की ज़रूरत/C++#define उपयोग/सी ++

#define scanf(fscanf(inf, 

आदेश को बदलने के लिए प्रत्येक scanf(fscanf(inf, साहित्यिक साथ

लेकिन मैं पता नहीं कैसे ...

धन्यवाद

+8

बस मैक्रोज़ के इस तरह के उपयोग के लिए नहीं कहें। –

+0

@ ब्रायन यह उपयोग से जिज्ञासा से अधिक है ... – Betamoo

+0

सी या सी ++, और क्या कंपाइलर? –

उत्तर

11

आप एक Variadic macro उपयोग करना चाहते हैं।

आपके मामले में, मुझे विश्वास है कि आप चाहते हैं:

#define scanf(...) fscanf(inf,__VA_ARGS__) 
+2

ध्यान दें कि यह पोर्टेबल नहीं है। –

+0

यह काम कर सकता है। –

+0

@ ब्रायन: यह सी ++ 0x ड्राफ्ट में है और जीएनयू, इंटेल और माइक्रोसॉफ्ट द्वारा समर्थित है, इसलिए कम से कम x86 पर मैं इसे अधिकांश प्रयोजनों के लिए पोर्टेबल मानता हूं – Christoph

0

आप एक कोष्ठक बदल नहीं सकते। आप विजुअल C++ का उपयोग कर रहे हैं, तो आप आप क्या चाहते हैं पूरा करने के लिए एक variadic मैक्रो का उपयोग कर सकते हैं:

#define scanf(format, ...) fscanf(inf, format, __VA_ARGS__) 

अन्य compilers एक ऐसी ही सुविधा है, लेकिन मैं उनके साथ परिचित नहीं हूँ।

+0

यह मानक सी 99 है। §6.10.3.1 –

+0

मुझे आश्चर्यचकित रंग। स्पष्टीकरण के लिए धन्यवाद। जहां तक ​​मुझे पता है –

+0

सी 99 मानक। – ShinTakezou

1

संभवतः जिस तरह से आपने कोशिश की, संभव नहीं है।

आप

#define scanf(S, ...) fscanf(inf, S, __VA_ARGS__) 

उदा देखें तरह बातें क्या करना है here

संपादित करें: जीएनयू सीपीपी वैरिएडिक मैक्रोज़ का भी समर्थन करता है; यह VA_ARGS डबल अंडरस्कोर से पहले और डबल अंडरस्कोर के साथ समाप्त हो गया है ... मैं यहाँ मार्कअप बचने अध्ययन करने के लिए है ...

+1

इनलाइन कोड बनाने के लिए बैकटिक्स के साथ आसपास के पाठ। पैराग्राफ के बीच में '__VA_ARGS__' लिखना सबसे अच्छा तरीका है। ;) –

3

बस fscanf का उपयोग कर अपने सभी कोड लिखते हैं, और इस तरह एक मैक्रो के साथ फ़ाइल नाम को परिभाषित:

#ifdef USE_SCANF 
#define SCANF_FILE(file) stdin 
#else 
#define SCANF_FILE(file) file 
#endif 

fscanf(SCANF_FILE(blah), "%d", &a); 
4

मैं इस तरह के एक सी ++

नहीं, आप नहीं कर में परिभाषित लिखने के लिए की जरूरत है। आप वास्तव में क्या करना चाहते हैं stdin रीडायरेक्ट करें।

freopen(inf, "r", stdin); 
संबंधित मुद्दे