2013-06-09 8 views
6

मैं एक ऐसी राज्य मशीन लिखने की कोशिश कर रहा हूं जो एक स्रोत फ़ाइल को फिसलती है और इसे उन वर्गों में विभाजित करती है जो या तो कंपाइलर का व्यवसाय या प्रीप्रोसेसर का व्यवसाय है। गहरा ट्रैवर्सल नहीं, मैं सिर्फ उन अनुभागों की तलाश कर रहा हूं जो या तो टिप्पणियां या प्रीप्रोसेसर निर्देश हैं। (कोई मैक्रोज़ नहीं, कोई सशर्त संकलित ब्लॉक, आदि)प्रीप्रोसेसर निर्देश निर्दिष्ट करने के लिए कानूनी कहां है?

टिप्पणियां काफी सरल हैं, लेकिन मुझे 100% यकीन नहीं है कि प्रीप्रोसेसर निर्देश निर्दिष्ट करना कानूनी है। उदाहरण के लिए, निम्नलिखित पंक्ति कानूनी है?

int i; #include <derp.h> 

क्या कोई विशेष मामला है जहां कुछ निर्देशों की अनुमति है और अन्य नहीं हैं?

मैंने Google और SO की खोज की है और यह कोई प्रश्न नहीं मिला जो इसका उत्तर देता है।

कृपया सी और सी ++ के लिए उत्तर दें, मैंने जानबूझकर और जानबूझकर दोनों को टैग किया है।

+10

आप, क्या तुम सच में भाषा के लिए निश्चित व्याकरण का उपयोग करना चाहिए एक पार्सर बनाने की कोशिश कर रहे हैं (यानी मानक (रों)) एसओ पर यहां गिरने वाले प्राणियों द्वारा दिए गए उत्तरों पर भरोसा करने के बजाय! –

+0

क्या आपने Google की भी कोशिश की है? – xaxxon

+3

हां, मैंने Google की कोशिश की है। ऐसा कहता है, सवाल में ठीक है। – Wug

उत्तर

11

प्रीप्रोसेसर निर्देश कहीं भी दिखाई दे सकते हैं, जब तक कि वे लाइन पर पहले गैर-व्हाइटस्पेस टोकन हों। तदनुसार, आप

int i; #define ThisIsntLegal SinceItsNotAtTheStart 

नहीं लिख सकते हैं लेकिन यह होगा:

int i; 
#define Woohoo ThisIsLegal 

आशा इस मदद करता है!

C11 Standard (N1570, ISO/IEC 9899:201x) (प्रासंगिक अनुभाग: s6.10 Prerocessing निर्देशों, पेज 160)

+0

क्या आपके पास संसाधन के लिए एक लिंक है जो यह कहता है? Anecdotal "इसे एक कंपाइलर पर फेंक दें और देखें कि यह क्या करता है" परीक्षण इसका समर्थन करता है, लेकिन मैं इसे लिखित में देखना चाहता हूं। : डी – Wug

+0

@Wug: जैसा कि मैंने उपरोक्त सुझाव दिया है, इसे लिखित में ढूंढने की जगह भाषा मानक है;) –

+1

+1। यदि आप मानकों के लिंक चाहते हैं, * सी 11 एस 6.10 प्रीप्रोकैसिंग निर्देश * इस – simonc

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