मेरे पास हेडर फ़ाइलों के उपयोग पर निम्नलिखित संदेह हैं।सी ++ हेडर फाइलों के उपयोग के लिए सर्वोत्तम अभ्यास
1 - टिप्पणी के बाद रखने गार्ड शामिल करें
/* Copyright Note and licence information (multiple lines) */
#ifndef FOO_H
#define FOO_H
// Header file contents
#endif
हर्ब Sutter अपने में कहते हैं, "सी ++ कोडिंग मानकों" बुक ऊपर की तरह है कि कोड समस्याग्रस्त है। वह कह रहा है कि "#ifndef" कथन हेडर फ़ाइल की पहली पंक्ति में दिखाई देना चाहिए। मुझे यह विश्वास के रूप में महसूस नहीं हुआ है। क्या यह आपके द्वारा हेडर फ़ाइलों में लोगों/gals के बाद है?
2 - हेडर फाइल
#ifndef FOO_H
#define FOO_H
namespace FooNameSpace{
// Header file contents
}
#endif
में नामस्थान का उपयोग करते हुए उपरोक्त कोड सही व्यवहार का उपयोग कर है? मेरा मतलब है, क्या आप हेडर फाइलों में नेमस्पेस का उपयोग करते हैं? मुझे पता है कि हेडर फ़ाइल में नेमस्पेस आयात करना व्यर्थ है लेकिन ऊपर की तरह एक घोषणा के बारे में क्या है?
यदि उपरोक्त एक सही तरीका है, तो आप किसी अन्य नामस्थान में एक वर्ग के "आगे की घोषणा" कैसे करते हैं? ऐसा लगता है जैसे
#ifndef FOO_H
#define FOO_H
namespace AnotherNameSpace{
class AnotherFoo; // forward declaration
}
namespace FooNameSpace{
// Use AnotherFoo here
}
#endif
"आगे घोषणा" है केवल विधि "चक्रीय निर्भरता" से बचने के लिए, सही है?
एक स्रोत फ़ाइल में (क्योंकि यह आप सुविधा का एक बहुत और बहुत कम अपने सभी चर से पहले टाइप करने के लिए देता है), का उपयोग करते हुए "का उपयोग" नहीं है बिल्कुल गलत, लेकिन एक हेडर फ़ाइल में, यह बहुत गलत है। –