একটি .h ফাইলে Whatোকা উচিত?


95

আপনার কোডটি একাধিক ফাইলে বিভক্ত করার সময় ঠিক কী একটি .h ফাইলে যাওয়া উচিত এবং কোন একটি .cpp ফাইলে যাওয়া উচিত?


4
সংশ্লিষ্ট প্রশ্ন: stackoverflow.com/questions/333889/...
Spoike

7
এটি একটি খাঁটি শৈলীর সমস্যা, তবে আমি বিশ্বাস করি যে সি +++ ঘোষণাগুলি কোনও .hppফাইলে যায় এবং সি ঘোষণাগুলি কোনও .hফাইলে যায়। সি এবং সি ++ কোড মিশ্রিত করার সময় এটি খুব সহায়ক (
থমাস ম্যাথিউস

@ থমাস ম্যাথিউজ জ্ঞান করে। যে অনুশীলন ব্যবহার করা হয়?
টাই

@ লাইটনিংফ: হ্যাঁ, অনুশীলনটি বিশেষত সি ++ এবং সি ভাষার মিশ্রণের সময় ব্যবহার করা হয়।
থমাস ম্যাথিউজ

উত্তর:


116

শিরোনাম ফাইলগুলি ( .h) একাধিক ফাইলের জন্য প্রয়োজনীয় তথ্য সরবরাহ করার জন্য ডিজাইন করা হয়েছে। শ্রেণীর ঘোষণা, ফাংশন প্রোটোটাইপ এবং গণনার মতো বিষয়গুলি সাধারণত হেডার ফাইলগুলিতে যায়। এক কথায়, "সংজ্ঞা"।

কোড ফাইল ( .cpp) বাস্তবায়ন তথ্য সরবরাহ করার জন্য ডিজাইন করা হয়েছে যা কেবল একটি ফাইলে জানা দরকার। সাধারণভাবে, ফাংশন সংস্থাগুলি এবং অভ্যন্তরীণ ভেরিয়েবলগুলি যেগুলি / অন্য মডিউল দ্বারা কখনও অ্যাক্সেস করা উচিত নয়, সেগুলি .cppফাইলে অন্তর্ভুক্ত। এক কথায়, "বাস্তবায়ন"।

নিজেকে "যেখানে আমি এটি পরিবর্তন করি, জিনিসগুলি আবার সংকলন করতে অন্য ফাইলগুলিতে কোড পরিবর্তন করতে হবে কি তা কোথায়" তা যাচাই করার জন্য নিজেকে জিজ্ঞাসা করার সবচেয়ে সহজ প্রশ্ন? যদি উত্তর "হ্যাঁ" হয় তবে এটি সম্ভবত শিরোনামের ফাইলে অন্তর্ভুক্ত; উত্তরটি যদি "না" হয় তবে এটি সম্ভবত কোড ফাইলের অন্তর্ভুক্ত।


4
বেসরকারী শ্রেণীর ডেটা বাদে শিরোনামে যেতে হয়। টেমপ্লেটগুলি অবশ্যই পুরো শিরোনামে সংজ্ঞায়িত হওয়া উচিত (যদি না আপনি কয়েকটি সংখ্যক কম্পাইলার সমর্থন করেন যা export)। # 1 এর আশেপাশের একমাত্র উপায় হ'ল পিআইএমপিএল। exportসমর্থিত হলে # 2 সম্ভব হবে এবং সি ++ 0 এক্স এবং externটেম্পলেট ব্যবহার করা সম্ভব হতে পারে । আইএমও, সি ++ এ শিরোনামের ফাইলগুলি তাদের কার্যকারিতা অনেকটাই হারাবে।
কিটসুনওয়াইএমজি

24
সমস্ত ভাল, কিন্তু ভুল পরিভাষা সহ। এক কথায়, "ঘোষণা" - "সংজ্ঞা" শব্দটি "বাস্তবায়ন" এর সমার্থক শব্দ। কেবলমাত্র ঘোষিত কোড, ইনলাইন কোড, ম্যাক্রো সংজ্ঞা এবং টেমপ্লেট কোড একটি শিরোনামে থাকা উচিত; অর্থাত্ কোড বা ডেটা ইনস্ট্যান্ট করে এমন কিছুই ti
ক্লিফোর্ড

8
ক্লিফোর্ডের সাথে আমার একমত হতে হবে আপনি পদ ঘোষণাপত্র এবং সংজ্ঞাটি বরং লসিলি এবং কিছুটা আন্তঃব্যক্তিকভাবে ব্যবহার করেন। তবে সি ++ এগুলির সুনির্দিষ্ট অর্থ রয়েছে। উদাহরণস্বরূপ: একটি শ্রেণীর ঘোষণাপত্রে একটি শ্রেণীর নাম পরিচয় করানো হয় তবে এতে কী নেই তা বলে। একটি শ্রেণীর সংজ্ঞা সমস্ত সদস্য এবং বন্ধু ফাংশন তালিকাভুক্ত করে। উভয়ই সমস্যা ছাড়াই হেডার ফাইলগুলিতে স্থাপন করা যেতে পারে। আপনি যাকে "ফাংশন প্রোটোটাইপ" বলছেন এটি একটি ফাংশন ঘোষণা । তবে একটি ফাংশন সংজ্ঞা হ'ল সেই জিনিসটিতে ফাংশনের কোড রয়েছে এবং এটি সিপিপি-ফাইলে স্থাপন করা উচিত - যতক্ষণ না এটি ইনলাইন অথবা (কোনও অংশ) কোনও টেম্পলেট নয়।
বিক্রি

5
তাদের সি ++ এর সুনির্দিষ্ট অর্থ রয়েছে, তাদের ইংরাজীতে সুনির্দিষ্ট অর্থ নেই। আমার উত্তরটি উত্তরোত্তর লেখা ছিল।
অ্যাম্বার

56

ফ্যাক্টটি হ'ল, সি ++ তে এটি কিছুটা জটিল যে সি শিরোনাম / উত্স সংস্থা।

সংকলক কী দেখতে পাবে?

সংকলকটি তার শিরোনামগুলি সঠিকভাবে অন্তর্ভুক্ত করে একটি বড় উত্স (.cpp) ফাইল দেখে sees উত্স ফাইলটি সংকলন ইউনিট যা কোনও অবজেক্ট ফাইলে সংকলিত হবে।

সুতরাং, হেডারগুলি কেন প্রয়োজনীয়?

কারণ একটি সংকলন ইউনিট অন্য সংকলন ইউনিটে একটি বাস্তবায়ন সম্পর্কে তথ্য প্রয়োজন হতে পারে। সুতরাং কেউ উদাহরণস্বরূপ একটি উত্সে কোনও ফাংশন বাস্তবায়ন লিখতে পারে এবং অন্য কোনও উত্সে এটি ব্যবহার করার প্রয়োজনে এই ফাংশনটির ডিক্লেয়ারেশন লিখতে পারে।

এই ক্ষেত্রে, একই তথ্যের দুটি অনুলিপি রয়েছে। যা খারাপ ...

সমাধানটি কিছু বিশদ ভাগ করে নেওয়া। উত্সটি বাস্তবায়নের মধ্যে থাকা অবস্থায়, ভাগ করা প্রতীকগুলির ঘোষণাপত্রের মতো কার্যাদি বা কাঠামো, শ্রেণি, এনাম ইত্যাদি সংজ্ঞা, ভাগ করার প্রয়োজন হতে পারে to

শিরোনামগুলি সেই ভাগ করা বিশদটি রাখার জন্য ব্যবহৃত হয়।

একাধিক উত্সের মধ্যে কী ভাগ করা দরকার তা ঘোষণাপত্রের শিরোনামে সরান

বেশি কিছু না?

সি ++ এ, এমন আরও কিছু জিনিস রয়েছে যা হেডারে রাখা যেতে পারে কারণ তাদেরও ভাগ করে নেওয়া দরকার:

  • ইনলাইন কোড
  • টেম্পলেট
  • ধ্রুবক (সাধারণত যা আপনি স্যুইচের অভ্যন্তরে ব্যবহার করতে চান ...)

ভাগ করা বাস্তবায়নগুলি সহ যা ভাগ করা দরকার তা সব শিরোনামে যান Move

তারপরে কি এর অর্থ হ'ল শিরোনামগুলির অভ্যন্তরে উত্স থাকতে পারে?

হ্যাঁ. আসলে, "হেডার" (অর্থাত্ উত্সগুলির মধ্যে ভাগ করা) এর ভিতরে থাকতে পারে এমন অনেকগুলি জিনিস রয়েছে।

  • ফরোয়ার্ড ঘোষণা
  • ঘোষণা / ক্রিয়া / স্ট্রাক্ট / শ্রেণি / টেম্পলেটগুলির সংজ্ঞা of
  • ইনলাইন এবং টেম্পলেট কোড প্রয়োগ

এটি জটিল হয়ে ওঠে এবং কিছু ক্ষেত্রে (চিহ্নগুলির মধ্যে বিজ্ঞপ্তি নির্ভরতা), এটি একটি শিরোনামে রাখা অসম্ভব।

শিরোনামগুলি তিন ভাগে বিভক্ত করা যেতে পারে

এর অর্থ এই যে, চরম ক্ষেত্রে, আপনি এটি করতে পারেন:

  • একটি অগ্রণী ঘোষণা শিরোনাম
  • একটি ঘোষণা / সংজ্ঞা শিরোনাম
  • একটি বাস্তবায়ন শিরোনাম
  • একটি বাস্তবায়ন উত্স

আসুন কল্পনা করুন আমাদের একটি টেম্পলেটেড মাইবজেক্ট রয়েছে। আমাদের থাকতে পারত:

// - - - - MyObject_forward.hpp - - - - 
// This header is included by the code which need to know MyObject
// does exist, but nothing more.
template<typename T>
class MyObject ;

// - - - - MyObject_declaration.hpp - - - - 
// This header is included by the code which need to know how
// MyObject is defined, but nothing more.
#include <MyObject_forward.hpp>

template<typename T>
class MyObject
{
   public :
      MyObject() ;
   // Etc.
} ;

void doSomething() ;

// - - - - MyObject_implementation.hpp - - - - 
// This header is included by the code which need to see
// the implementation of the methods/functions of MyObject,
// but nothing more.
#include <MyObject_declaration.hpp>

template<typename T>
MyObject<T>::MyObject()
{
   doSomething() ;
}

// etc.

// - - - - MyObject_source.cpp - - - - 
// This source will have implementation that does not need to
// be shared, which, for templated code, usually means nothing...
#include <MyObject_implementation.hpp>

void doSomething()
{
   // etc.
} ;

// etc.

কি দারুন!

"বাস্তব জীবনে", এটি সাধারণত কম জটিল হয়। বেশিরভাগ কোডের উত্সটিতে কিছু অন্তর্নিহিত কোড সহ কেবল একটি সরল শিরোনাম / উত্স সংস্থা থাকবে।

তবে অন্যান্য ক্ষেত্রে (মুখ্য বিষয়গুলি একে অপরকে জানার জন্য), আমার প্রতিটি অবজেক্টের জন্য পৃথক ঘোষণা এবং বাস্তবায়ন শিরোনাম থাকতে হয়েছিল, কেবলমাত্র কিছু সংকলনের ত্রুটি দেখতে আমাকে সহায়তা করার জন্য সেই শিরোনাম সহ খালি উত্স সহ।

পৃথক শিরোনামগুলিতে শিরোনামগুলি ভেঙে ফেলার আর একটি কারণ হ'ল সংকলনকে গতিবদ্ধ করা, সংশ্লেষের পার্থকৃত চিহ্নগুলির পরিমাণকে কঠোরভাবে প্রয়োজনীয় হওয়াতে সীমাবদ্ধ করা এবং কোনও ইনলাইন পদ্ধতি প্রয়োগকরণ পরিবর্তিত হলে কেবলমাত্র সামনে ঘোষণার জন্য যত্নশীল এমন উত্সের অভাবনীয় পুনঃসংশোধন এড়ানো।

উপসংহার

আপনার কোড সংস্থাকে যতটা সম্ভব সহজ এবং যতটা সম্ভব মডুলার করা উচিত। সোর্স ফাইলে যথাসম্ভব রাখুন। যা ভাগ করা দরকার তা কেবল শিরোনামে প্রকাশ করুন।

তবে যেদিন আপনার টেম্পলেটড অবজেক্টগুলির মধ্যে বিজ্ঞপ্তি নির্ভরতা থাকবে, অবাক হবেন না যদি আপনার কোড সংগঠনটি আরও কিছু "আকর্ষণীয়" হয়ে যায় যে সরল শিরোনাম / উত্স সংস্থা ...

^ _ ^


18

অন্যান্য সমস্ত উত্তরের পাশাপাশি, আমি আপনাকে বলব যে আপনি একটি শিরোলেখ ফাইলটিতে কী রাখবেন না:
usingঘোষণা (সর্বাধিক সাধারণ using namespace std;) একটি শিরোলেখ ফাইলটিতে উপস্থিত হওয়া উচিত নয় কারণ তারা উত্স ফাইলের নাম স্থানটিকে দূষিত করে যা এতে অন্তর্ভুক্ত রয়েছে ।


+1 একটি ক্যাভিয়েট সহ যা আপনি যতক্ষণ না এটি কিছু বিশদ নেমস্পেস (বা কোনও নামবিহীন নামস্থান) হিসাবে ব্যবহার করতে পারবেন। তবে হ্যাঁ, কোনও usingশিরোনামে বিশ্বব্যাপী নেমস্পেসে স্টাফ আনার জন্য কখনই ব্যবহার করবেন না ।
KitsuneYMG

+1 এটি উত্তর দেওয়া অনেক সহজ is :) এছাড়াও, শিরোনাম ফাইলগুলিতে বেনামে নেমস্পেস থাকা উচিত নয়
বিক্রয়বিটজে

শিরোনামের ফাইলগুলির জন্য বেনামে নেমস্পেস থাকা ভাল, আপনি যতক্ষণ বুঝতে পারছেন এর অর্থ কী, অর্থাত্ প্রতিটি অনুবাদ ইউনিটে আপনার নাম স্থানটি সংজ্ঞায়িত করা সামগ্রীর আলাদা কপি থাকবে। static inlineযখন আপনি টেমপ্লেটগুলির সাথে অভ্যন্তরীণ যোগসূত্রটি একত্রিত করেন তখন কী হয় তার কিছু করার কারণে বেনামে নেমস্পেসের ইনলাইন ফাংশনগুলি সি ++ এ সুপারিশ করা হয় । আনন নেমস্পেসগুলি আপনাকে বাহ্যিক সংযোগ সংরক্ষণ করার সময় ফাংশনগুলি "আড়াল" করতে দেয়।
স্টিভ জেসোপ

স্টিভ, আপনি যা লিখেছেন তা আমাকে বিশ্বাস করেনি। অনুগ্রহ করে একটি কংক্রিটের উদাহরণ চয়ন করুন যেখানে আপনি মনে করেন যে কোনও শিরোনাম ফাইলটিতে আনন নেমস্পেসটি পুরো অর্থবোধ করে।
বিক্রি

7

কি কিছুই কম্পাইল (শূন্য বাইনারি পদচিহ্ন) শিরোনাম ফাইলে যায়।

ভেরিয়েবলগুলি কোনও কিছুর মধ্যে সংকলন করে না, তবে টাইপ ডিক্লেয়ারেশনগুলি করে (কোয়েজগুলি কেবল তারা বর্ণনা করে যে চলকগুলি কীভাবে আচরণ করে)।

ফাংশনগুলি করে না, তবে ইনলাইন ফাংশনগুলি (বা ম্যাক্রোগুলি) করে না কারণ তারা কেবল যেখানে ডাকে সেখানে কোড তৈরি করে।

টেমপ্লেটগুলি কোড নয়, সেগুলি কেবল কোড তৈরির একটি রেসিপি। সুতরাং তারা এইচ ফাইলের মধ্যে যান।


4
"ইনলাইন ফাংশন ... কেবল সেখানে কল করা কোড প্রস্তুত করুন"। এটা সত্যি না. ইনলাইন ফাংশনগুলি কল সাইটগুলিতে ইনলাইন করা যেতে পারে বা নাও হতে পারে, তবে সেগুলি ইনলাইন করা থাকলেও প্রকৃত ফাংশন বডিটি এখনও অস্তিত্ব রয়েছে ঠিক যেমন এটি কোনও অন-ইনলাইন ফাংশনের জন্য রয়েছে। শিরোনামগুলিতে ইনলাইন ফাংশনগুলি ঠিক রাখা কারণ তারা কোড উত্পন্ন করে কিনা তা কিছুই নয়, কারণ ইনলাইন ফাংশনগুলি একটি সংজ্ঞা নিয়মকে ট্রিগার করে না, সুতরাং অন-ইনলাইন ফাংশনগুলির বিপরীতে দুটি পৃথক অনুবাদ ইউনিট একসাথে সংযোগ স্থাপনে কোনও সমস্যা নেই যা উভয়ই শিরোলেখ অন্তর্ভুক্ত করেছে।
স্টিভ জেসোপ

4

সাধারণভাবে, আপনি শিরোনাম ফাইলটিতে ঘোষণা এবং প্রয়োগকরণ (.cpp) ফাইলে সংজ্ঞা রাখেন। এটি ব্যতিক্রম টেম্পলেটগুলি, যেখানে সংজ্ঞাটি অবশ্যই শিরোনামেও যেতে হবে।

এই প্রশ্নটি এবং এর অনুরূপ প্রশ্নগুলি প্রায়শই এসও-তে জিজ্ঞাসা করা হয়েছে - দেখুন কেন সি ++ এ হেডার ফাইল এবং .cpp ফাইল রয়েছে? এবং সি ++ শিরোনাম ফাইল, উদাহরণস্বরূপ কোড পৃথকীকরণ


অবশ্যই, আপনি শিরোনাম ফাইলগুলিতে বর্গ সংজ্ঞাও রাখতে পারেন। তাদের এমনকি টেমপ্লেট হতে হবে না।
বিক্রি

2

আপনার ক্লাস এবং ফাংশন ডিক্লেয়ারেশন প্লাস ডকুমেন্টেশন এবং ইনলাইন ফাংশন / পদ্ধতিগুলির সংজ্ঞা (যদিও কিছু তাদের আলাদা .inl ফাইলগুলিতে স্থাপন করতে পছন্দ করে)।


2

প্রধানত হেডার ফাইলটিতে ক্লাস কঙ্কাল বা ঘোষণা থাকে (ঘন ঘন পরিবর্তন হয় না)

এবং সি পি সি ফাইলে শ্রেণি প্রয়োগ রয়েছে (ঘন ঘন পরিবর্তন হয়)।


5
দয়া করে অ-মানক পরিভাষা ব্যবহার থেকে বিরত থাকুন। "ক্লাস কঙ্কাল" কী, "শ্রেণি বাস্তবায়ন" কী? এছাড়াও, আপনি ক্লাসগুলির প্রসঙ্গে যেটিকে ডিক্লারারেশন বলছেন তাতে বর্গ সংজ্ঞাও অন্তর্ভুক্ত রয়েছে।
বিক্রয়বিটজে

1

শিরোনাম ফাইল (। এইচ) ক্লাস, স্ট্রাক্ট এবং এর পদ্ধতি, প্রোটোটাইপ ইত্যাদির ঘোষণার জন্য হওয়া উচিত those এই বিষয়গুলির বাস্তবায়ন সিপিপিতে তৈরি করা হয়।

in .h

    class Foo {
    int j;

    Foo();
    Foo(int)
    void DoSomething();
}

1

আমি দেখতে আশা করি:

  • ঘোষণা
  • মন্তব্য
  • সংজ্ঞাটি ইনলাইন হিসাবে চিহ্নিত হয়েছে
  • টেম্পলেট

সত্যিই উত্তর যদিও দেওয়া হয় না:

  • সংজ্ঞা (জিনিসগুলি বহুগুণ সংজ্ঞায়িত হতে পারে)
  • ঘোষণাপত্র / নির্দেশাবলী ব্যবহার করে (আপনার শিরোনাম সহ যে কাউকে তাদের জোর করে, নেমক্ল্যাশ হতে পারে)

4
আপনি অবশ্যই হেডার ফাইলগুলিতে বর্গ সংজ্ঞা স্থাপন করতে পারেন । একটি শ্রেণির ঘোষণা তার সদস্যদের সম্পর্কে কিছু বলে না anything
বিক্রি

1

শিরোনাম কিছু সংজ্ঞায়িত করে তবে বাস্তবায়ন সম্পর্কে কিছু বলে না। (এই "মেটাফর্টে" টেমপ্লেটগুলি বাদ দিয়ে।

এই বলে যে, আপনার "সংজ্ঞাগুলি" উপ-গোষ্ঠীতে বিভক্ত করা দরকার, এক্ষেত্রে দুটি ধরণের সংজ্ঞা রয়েছে।

  • আপনি আপনার স্ট্রুকুটারের "লেআউট" সংজ্ঞায়িত করেন, আশেপাশের ব্যবহার গোষ্ঠীগুলির দ্বারা প্রয়োজনীয় যতটা বলছেন telling
  • একটি চলক, ফাংশন এবং একটি শ্রেণীর সংজ্ঞা।

এখন, আমি অবশ্যই প্রথম সাবগ্রুপ সম্পর্কে কথা বলছি।

বাকী সফ্টওয়্যার বাস্তবায়নটি ব্যবহার করতে সহায়তা করতে শিরোনামটি আপনার কাঠামোর বিন্যাসটি সংজ্ঞায়িত করতে পারে। আপনি এটিকে আপনার বাস্তবায়নের "বিমূর্ততা" হিসাবে দেখতে চাইতে পারেন, যা হুংকারেই বলা হয়েছে তবে, আমি মনে করি এটি এক্ষেত্রে বেশ উপযুক্ত।

পূর্ববর্তী পোস্টারগুলি যেমন আপনাকে ব্যক্তিগত এবং সর্বজনীন ব্যবহারের ক্ষেত্রগুলি এবং তাদের শিরোনামগুলি ঘোষিত দেখিয়েছে এবং দেখিয়েছে, এর মধ্যে এটিতে ব্যক্তিগত এবং পাবলিক ভেরিয়েবলগুলিও অন্তর্ভুক্ত রয়েছে। এখন, আমি এখানে কোডটির নকশায় যেতে চাই না তবে, আপনি আপনার শিরোনামগুলিতে কী রেখেছিলেন তা বিবেচনা করতে চাইতে পারেন, কারণ এটি শেষ ব্যবহারকারী এবং বাস্তবায়নের মধ্যবর্তী স্তর।


1
  • শিরোনামের ফাইলগুলি - বিকাশের সময় খুব বেশি সময় পরিবর্তন করা উচিত নয় -> আপনার ভাবা উচিত এবং এগুলি একবারে লিখুন (আদর্শ ক্ষেত্রে)
  • উত্স ফাইল - প্রয়োগের সময় পরিবর্তন

এটি একটি অনুশীলন। কিছু ছোট প্রকল্পের জন্য, এটি যাওয়ার উপায় হতে পারে। তবে আপনি তাদের স্বাক্ষর পরিবর্তন বা মুছে ফেলার পরিবর্তে ফাংশন এবং তাদের প্রোটোটাইপগুলি (শিরোনাম ফাইলগুলিতে) হ্রাস করার চেষ্টা করতে পারেন। অন্তত বড় সংখ্যা পরিবর্তন না হওয়া পর্যন্ত। ১.৯.২.২০.০ বিটাতে ফেলা হলে Like
TamusJRoyce

1

শিরোনাম (। ঘন্টা)

  • ম্যাক্রো এবং ইন্টারফেসের জন্য প্রয়োজনীয় অন্তর্ভুক্ত (যত কম সম্ভব)
  • ফাংশন এবং ক্লাসের ঘোষণা
  • ইন্টারফেসের ডকুমেন্টেশন
  • ইনলাইন ফাংশন / পদ্ধতিগুলির যদি কোনও থাকে তবে তার ঘোষণা
  • গ্লোবাল ভেরিয়েবলের বাহ্যিক (যদি থাকে)

বডি (.cpp)

  • বাকি ম্যাক্রো এবং অন্তর্ভুক্ত
  • মডিউলটির শিরোনাম অন্তর্ভুক্ত করুন
  • ফাংশন এবং পদ্ধতি সংজ্ঞা
  • গ্লোবাল ভেরিয়েবল (যদি থাকে)

থাম্বের নিয়ম হিসাবে, আপনি মডিউলটির "ভাগ করা" অংশটি .h এর উপরে রেখেছেন (যে অংশটি অন্যান্য মডিউলগুলি দেখতে সক্ষম হওয়া প্রয়োজন) এবং "ভাগ করে নেই" অংশটি .cpp এ রেখেছেন

পিডি: হ্যাঁ, আমি গ্লোবাল ভেরিয়েবলগুলি অন্তর্ভুক্ত করেছি। আমি তাদের কয়েকবার ব্যবহার করেছি এবং এটি হেডারগুলিতে সংজ্ঞায়িত না করা গুরুত্বপূর্ণ বা আপনি অনেকগুলি মডিউল পাবেন, যার প্রতিটি তার নিজস্ব পরিবর্তনশীল নির্ধারণ করে।

সম্পাদনা: ডেভিডের মন্তব্যের পরে সংশোধিত


থাম্বের নিয়ম হিসাবে, যতটা সম্ভব অন্তর্ভুক্ত .h ফাইলে থাকা উচিত and এটি সংকলনের সময়কে সংক্ষিপ্ত করে এবং নামস্থানগুলিকে দূষিত করে না।
ডেভিড থর্নলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.