मैं शायद कभी भी कभी नहीं कहूंगा, लेकिन डेटा और कोड उत्पन्न करने वाले बयानों को पार्स किया जाता है। यह एक .h फ़ाइल में नहीं होना चाहिए।
मैक्रोज़, इनलाइन फ़ंक्शंस और टेम्पलेट डेटा या कोड की तरह लग सकते हैं, लेकिन वे कोड उत्पन्न नहीं करते हैं क्योंकि वे पार्स होते हैं, लेकिन इसके बजाय जब वे उपयोग किए जाते हैं। इन वस्तुओं को अक्सर एक .c या .cpp से अधिक में उपयोग करने की आवश्यकता होती है, इसलिए वे .h से संबंधित होते हैं।
मेरे विचार में, हेडर फ़ाइल में संबंधित .c या .cpp के लिए न्यूनतम व्यावहारिक इंटरफ़ेस होना चाहिए। इंटरफ़ेस में वैश्विक चर के लिए #defines, class, typedef, संरचना परिभाषाएँ, फ़ंक्शन प्रोटोटाइप और कम पसंदीदा, बाहरी परिभाषाएं शामिल हो सकती हैं। हालाँकि, यदि किसी घोषणा को केवल एक स्रोत फ़ाइल में उपयोग किया जाता है, तो इसे संभवतः .h से बाहर रखा जाना चाहिए और इसके बजाय स्रोत फ़ाइल में समाहित किया जाना चाहिए।
कुछ असहमत हो सकते हैं, लेकिन .h फ़ाइलों के लिए मेरा व्यक्तिगत मानदंड यह है कि वे # अन्य सभी .h फ़ाइलों को हटा दें, जिन्हें उन्हें संकलित करने में सक्षम होने की आवश्यकता है। कुछ मामलों में, यह बहुत सारी फाइलें हो सकती हैं, इसलिए हमारे पास बाहरी निर्भरता को कम करने के लिए कुछ प्रभावी तरीके हैं जैसे कि कक्षाओं के लिए आगे की घोषणाएं जो हमें कक्षा के ऑब्जेक्ट्स में पॉइंटर्स का उपयोग किए बिना यह शामिल करती हैं कि क्या फ़ाइलों को शामिल करने का एक बड़ा पेड़ हो सकता है।