আপনার শ্রেণীর সংজ্ঞা জন্য *। এইচ বা * .এইচপি


551

আমি *.hআমার বর্গ সংজ্ঞাগুলির জন্য সবসময় একটি ফাইল ব্যবহার করেছি, তবে কিছু উত্সাহিত লাইব্রেরি কোড পড়ার পরে, আমি বুঝতে পেরেছিলাম যে তারা সমস্ত ব্যবহার করে *.hpp। ফাইল ফাইলের সম্প্রসারণ সম্পর্কে আমার সর্বদা বিরক্তি ছিল, আমি মনে করি মূলত কারণ আমি এটি অভ্যস্ত নই।

*.hppওভার ব্যবহারের সুবিধা এবং অসুবিধাগুলি কী কী *.h?

উত্তর:


526

সি বনাম সি ++ শিরোনামের আলাদা নামকরণের কয়েকটি কারণ এখানে রয়েছে:

  • স্বয়ংক্রিয় কোড ফর্ম্যাটিং, আপনার সি এবং সি ++ কোড ফর্ম্যাট করার জন্য বিভিন্ন নির্দেশিকা থাকতে পারে। যদি শিরোনামগুলি এক্সটেনশনের দ্বারা পৃথক করা হয় তবে আপনি যথাযথ বিন্যাসটি স্বয়ংক্রিয়ভাবে প্রয়োগ করতে আপনার সম্পাদককে সেট করতে পারেন
  • নামকরণ, আমি এমন প্রকল্পগুলিতে চলেছি যেখানে সি-তে লিখিত গ্রন্থাগার ছিল এবং তারপরে সি ++ এ র্যাপারগুলি কার্যকর করা হয়েছিল। যেহেতু শিরোনামগুলির সাধারণত অনুরূপ নাম থাকে, অর্থাত বৈশিষ্ট্য। বনাম ফিচার.ইচপি, সেগুলি আলাদা করে বলা সহজ।
  • অন্তর্ভুক্তি, সম্ভবত আপনার প্রকল্পে সি ++ তে লিখিত আরও উপযুক্ত সংস্করণ রয়েছে তবে আপনি সি সংস্করণটি ব্যবহার করছেন (উপরের পয়েন্টটি দেখুন)। যদি শিরোনামগুলি ভাষার প্রয়োগ করা হয় তার নাম অনুসারে আপনি সহজেই সমস্ত সি-শিরোনাম খুঁজে পেতে এবং সি ++ সংস্করণগুলি পরীক্ষা করতে পারেন।

মনে রাখবেন, সি না C ++ এবং যদি না জানেন আপনি কি করছেন এটা খুবই মিশ্রিত করা এবং মেলে বিপজ্জনক হতে পারে। আপনার উত্সের নামকরণ যথাযথভাবে আপনাকে ভাষা আলাদা বলতে সহায়তা করে।


233

আমি .hpp ব্যবহার করি কারণ আমি ব্যবহারকারীটি শিরোনামটি কী সি ++ শিরোনাম, এবং কোন শিরোনাম সি শিরোনাম হয় তা পার্থক্য করতে চাই।

আপনার প্রকল্পটি যখন সি এবং সি ++ উভয়ই মডিউল ব্যবহার করছে তখন এটি গুরুত্বপূর্ণ হতে পারে: আমার আগে অন্য কেউ ব্যাখ্যা করার মতো আপনার খুব যত্ন সহকারে এটি করা উচিত এবং এটি আপনি "চুক্তি" দ্বারা শুরু করেন যা আপনি এক্সটেনশনের মাধ্যমে অফার করেন by

.hpp: সি ++ শিরোনাম

(বা .এইচএক্সএক্স, বা। এইচ, বা যা কিছু)

এই শিরোনামটি কেবল সি ++ এর জন্য।

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

.h: সি / সি ++ সামঞ্জস্যপূর্ণ বা খাঁটি সি শিরোনাম

এই শিরোলেখ সরাসরি বা অপ্রত্যক্ষভাবে উভয় সি উত্স এবং সি ++ উত্স দ্বারা অন্তর্ভুক্ত করা যেতে পারে।

এটি সরাসরি অন্তর্ভুক্ত করতে পারে, __cplusplusম্যাক্রো দ্বারা সুরক্ষিত :

  • যার অর্থ, একটি সি ++ দৃষ্টিকোণ থেকে, সি-সামঞ্জস্যপূর্ণ কোড হিসাবে সংজ্ঞায়িত করা হবে extern "C"
  • একটি সি দৃষ্টিকোণ থেকে, সমস্ত সি কোড স্পষ্টভাবে দৃশ্যমান হবে, তবে সি ++ কোডটি লুকানো থাকবে (কারণ এটি কোনও সি সংকলকটিতে সংকলন করবে না)।

উদাহরণ স্বরূপ:

#ifndef MY_HEADER_H
#define MY_HEADER_H

   #ifdef __cplusplus
      extern "C"
      {
   #endif

   void myCFunction() ;

   #ifdef __cplusplus
      } // extern "C"
   #endif

#endif // MY_HEADER_H

অথবা এটিকে পরোক্ষভাবে অন্তর্ভুক্ত করা যেতে পারে extern "C"

উদাহরণ স্বরূপ:

#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP

extern "C"
{
#include "my_header.h"
}

#endif // MY_HEADER_HPP

এবং:

#ifndef MY_HEADER_H
#define MY_HEADER_H

void myCFunction() ;

#endif // MY_HEADER_H

3
এটি অনেকগুলি সি ++ প্রকল্পে বেশ অস্বস্তিকর। .h ফাইলগুলি খুব অ-সি-আইশ স্টাফের জন্য ব্যবহৃত হয়।
einpoklum

4
@ আইনপোকলুম: অবশ্যই তবে আমি "বানর দেখি বানর করি" আচরণটি এড়াতে চেষ্টা করি। বর্তমান ক্ষেত্রে, উভয় এক্সটেনশন (এবং অন্যান্য) উপলব্ধ, তাই আমি এগুলিকে প্রকৃত পক্ষে গণনা করার চেষ্টা করি। কোডগুলির সাথে এই চুক্তিটি যা ক্লায়েন্টদের সাথে ভাগ করা খুব দরকারী: প্রত্যেকে (অর্থাৎ শত শত বিকাশকারী) জানে যে ".এইচ" ফাইলগুলি ক্লায়েন্টরা একটি সি সংকলক ব্যবহার করে ব্যবহার করতে পারে, সুতরাং সেখানে কী যেতে পারে বা কোনও ভুল হয় না mist না. এবং প্রত্যেকে (ক্লায়েন্ট সহ) জানে যে ".এইচপিপি" ফাইলগুলি কখনই সি-বান্ধব হওয়ার চেষ্টা করবে না। সবাই জিতল।
পেরেসেবল

4
@paercebal, আপনি পরামর্শ করছি যাতে করে পরিবর্তে , এবং .HPP উপর .hpp ?
জিওফ সাওয়ায়া

6
@ জিফসওয়েয়া: না, দুঃখিত। এটা একটা অভ্যাস নিবন্ধগুলি লেখার সময়, আমি বড় আকারের এক্সটেনশানগুলিকে ".HPP ফাইল" এর মতো ফাইলগুলির ধরণের দ্বারা আলাদা করতে ব্যবহার করি। তবে আমার হার্ডডিস্কে থাকা প্রকৃত ফাইলগুলির এক্সটেনশানগুলি সর্বদা ছোট হাতের অক্ষরে থাকে, এমনকি নামটিও "মাই ক্লাস এইচপি" বা "মডিউল এইচপি"
প্যারেসেবল

4
ধন্যবাদ, @ পেসারবাল আমি পেডেন্টিক পাচ্ছিলাম
পেডেন্টিক

48

আমি সর্বদা .hppশিরোনামকে .hএবং এর এক ধরণের পোর্টম্যানট্যু হিসাবে বিবেচনা করি.cpp ফাইল ফাইলের ... এমন একটি শিরোনাম যাতে প্রয়োগের বিবরণও রয়েছে।

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


31

আপনি কোন এক্সটেনশন ব্যবহার করেন তা বিবেচ্য নয়। হয় একটি ঠিক আছে।

আমি *.hসি এবং *.hppসি ++ এর জন্য ব্যবহার করি ।


23

সম্পাদনা করুন [ড্যান নিসেনবাউম থেকে যুক্ত পরামর্শ]:

একটি কনভেনশন দ্বারা, .Hpp ফাইলগুলি ব্যবহার করা হয় যখন প্রোটোটাইপগুলি শিরোনামে নিজেই সংজ্ঞায়িত হয়। শিরোনামগুলিতে এই জাতীয় সংজ্ঞাগুলি টেমপ্লেটগুলির ক্ষেত্রে কার্যকর, যেহেতু সংকলক কেবলমাত্র টেম্পলেট ইনস্ট্যান্টেশনে প্রতিটি ধরণের কোড তৈরি করে। সুতরাং, যদি তাদের শিরোনাম ফাইলগুলিতে সংজ্ঞায়িত না করা হয়, তবে তাদের সংজ্ঞাগুলি অন্য সংকলন ইউনিটগুলির লিঙ্ক টাইমে সমাধান করা হবে না। যদি আপনার প্রকল্পটি কেবলমাত্র C ++ প্রকল্প হয় যা টেম্পলেটগুলির ভারী ব্যবহার করে, এই সম্মেলনটি কার্যকর হবে।

এই কনভেনশন মেনে চলে এমন নির্দিষ্ট কিছু টেম্পলেট লাইব্রেরিগুলি .hpp এক্সটেনশানগুলির সাথে শিরোনাম দেয় যাতে তাদের সাথে সম্পর্কিত .cpp ফাইল নেই।

অন্য কনভেনশন হ'ল সি হেডারগুলির জন্য .h এবং সি ++ এর জন্য .hpp ব্যবহার করা হয়; একটি ভাল উদাহরণ বুস্ট গ্রন্থাগার হবে।

বুস্ট এফএকিউ এর উদ্ধৃতি,

ফাইল এক্সটেনশনগুলি ফাইলের "ধরণ" উভয়ই মানুষ এবং কম্পিউটার প্রোগ্রামগুলিতে যোগাযোগ করে। '.H' এক্সটেনশনটি সি হেডার ফাইলগুলির জন্য ব্যবহৃত হয় এবং তাই সি ++ শিরোনাম ফাইলগুলি সম্পর্কে ভুল জিনিসটি যোগাযোগ করে। কোনও এক্সটেনশান ব্যবহার না করে কোনও কথোপকথন করে না এবং টাইপ নির্ধারণ করতে ফাইলের সামগ্রীগুলির পরিদর্শন করতে বাধ্য করে। '.Hpp' ব্যবহার করা নির্বিঘ্নে এটি সি ++ শিরোনাম ফাইল হিসাবে চিহ্নিত করে এবং প্রকৃত অনুশীলনে ভালভাবে কাজ করে। (রেইনার দেইক)


এর কোনওটিই সত্য নয়, কোড জেনারেশন বা লিঙ্কিংয়ের ক্ষেত্রে ফাইলটি .h বা .hpp কিনা তা কোনও ত্রুটি করে না।
মার্ক ইনগ্রাম

এটা কি কেবল সম্মেলনের বিষয় নয়? সি ++ স্টেডিয়ামের লাইব্রেরিটি কোনও প্রকার ছাড়াই এর সমস্ত শিরোনাম সরবরাহ করে। ".hpp" ব্যবহার করে কেবল ইঙ্গিত দেওয়া হয় যে একই প্রোটোটাইপগুলি একই ফাইলে সংজ্ঞায়িত হয়েছে এবং কোনও .cpp ফাইল নেই।
প্রোগ্রামসিপি

5
এই উত্তরটি দরকারী, আমি মনে করি ব্যতিক্রম ব্যতীত এটি একটি খুব সাধারণ, তবে গুরুত্বপূর্ণ এই বাক্যাংশটি অনুপস্থিত: "ভাষা নিয়মের দ্বারা নয়" (কোথাও) "কনভেনশন দ্বারা"।
ড্যান নিসেনবাউম

13

আমি সম্প্রতি ব্যবহার শুরু করেছি *.hpp সি ++ হেডারগুলির জন্য ।

কারণটি হ'ল আমি আমার প্রাথমিক সম্পাদক হিসাবে ইম্যাক্স ব্যবহার করি এবং আপনি কোনও *.hফাইল লোড করার সময় এটি স্বয়ংক্রিয়ভাবে সি-মোডে প্রবেশ করে এবং আপনি যখন কোনও ফাইল লোড করেন তখন সি ++ - মোডে প্রবেশ করে *.hpp

এছাড়াও আসলে আমি চয়নের জন্য কোন ভাল কারণ দেখতে *.hওভার *.hppবা সহ-বিপরীতভাবে।


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

12

আমি এই অনুসারে "ইউজার 1949346" এর উপর আমার মন্তব্যে (গুলি) উত্তর দেওয়ার জন্য এটি একটি অনুস্মারক হিসাবে উত্তর দিচ্ছি।


তাই ইতিমধ্যে অনেকে উত্তর দিয়েছেন: যেভাবেই ঠিক আছে। অনুসরণ করে তাদের নিজস্ব ছাপগুলিতে জোর দেওয়া।

ভূমিকা, পূর্বের নামযুক্ত মন্তব্যগুলিতে যেমন বলা হয়েছে, আমার মতে C++শিরোনাম বর্ধনের প্রস্তাব দেওয়া হচ্ছে .hযদি এর বিরুদ্ধে কোনও কারণ না থাকে।

যেহেতু আইএসও / আইইসি নথিগুলি শিরোনাম ফাইলগুলির এই স্বরলিপি ব্যবহার করে এবং .hppসেগুলির সাথে তাদের ভাষার ডকুমেন্টেশনে কোনও স্ট্রিং মেলেনি C++

তবে আমি এখন একটি অনুমোদনের কারণেই লক্ষ্য করছি যে কেন দুটি উপায়ই ঠিক আছে, এবং বিশেষত কেন এটি নিজের ভাষার মুখের নয়।

সুতরাং এখানে আমরা যেতে।

C++ডকুমেন্টেশন (আমি আসলে সংস্করণ N3690 থেকে রেফারেন্স গ্রহণ করছি) সংজ্ঞায়িত করে একটি শিরোলেখ নিম্নলিখিত সিনট্যাক্স সাথে সামঞ্জস্য রয়েছে যে:

২.৯ শিরোনামের নাম

header-name:
    < h-char-sequence >
    " q-char-sequence "
h-char-sequence:
    h-char
    h-char-sequence h-char
h-char:
    any member of the source character set except new-line and >
q-char-sequence:
    q-char
    q-char-sequence q-char
q-char:
    any member of the source character set except new-line and "

সুতরাং আমরা যেমন এই অংশ থেকে নিষ্কাশন করতে পারি, শিরোনাম ফাইলের নাম উত্স কোডেও বৈধ যে কোনও কিছু হতে পারে। ধারণকারী ছাড়া '\n'অক্ষর এবং যদি এটা দ্বারা অন্তর্ভুক্ত করা হয় উপর নির্ভর করে <>এটি একটি ধারণ মঞ্জুরিপ্রাপ্ত নয় >। বা অন্য উপায়ে যদি এটি অন্তর্ভুক্ত করা হয় ""তবে এটিতে একটি যুক্ত করার অনুমতি নেই "

অন্য কথায়: যদি আপনার মতো ফাইলনাম সমর্থনকারী পরিবেশ থাকে তবে এর মধ্যে prettyStupidIdea.>অন্তর্ভুক্ত রয়েছে:

#include "prettyStupidIdea.>"

বৈধ হবে, কিন্তু:

#include <prettyStupidIdea.>>

অবৈধ হবে। একইভাবে অন্যান্য উপায়।

আর যদি

#include <<.<>

একটি বৈধ অন্তর্ভুক্তযোগ্য শিরোনাম ফাইলের নাম হতে পারে।

এমনকি C++এটি মেনে চলতে পারে , এটি একটি সুন্দর সুন্দর বোকামি ধারণা হবে।

এবং এ কারণেই .hppবৈধ।

তবে কমিটির ভাষার সিদ্ধান্ত গ্রহণের ফলাফল নয়!

তাই ব্যবহার সম্পর্কে আলোচনা .hppসম্পর্কে এরকম হিসাবে একই .cc, .mmবা কখনও আর কি আমি এই বিষয়ে অন্যান্য পোস্ট পড়া।

আমাকে স্বীকার করতে হবে যে 1.hpp থেকে আসে যেখানে আমার কোনও ক্লু নেই , তবে আমি কিছু পার্সিং সরঞ্জাম, আইডিই বা এর সাথে সম্পর্কিত অন্য কোনও উদ্ভাবককে কিছু অভ্যন্তরীণ প্রক্রিয়া অনুকূল করতে বা কিছু আবিষ্কার করার জন্য এই ধারণাটি নিয়ে এসেছি (সম্ভবত তাদের জন্য প্রয়োজনীয়ভাবে ) নতুন নামকরণের সম্মেলন।C++

তবে এটি ভাষার অংশ নয়।

এবং যখনই কেউ এইভাবে এটি ব্যবহার করার সিদ্ধান্ত নেয়। এটা হতে পারে, কারণ তিনি লেগেছে এটা সবচেয়ে অথবা কারণ কর্মপ্রবাহ কিছু অ্যাপ্লিকেশন এটি প্রয়োজন, এটি 2 ভাষা একটি প্রয়োজন। সুতরাং যে কেউ "পিপি বলে এটি সি ++ এর সাথে ব্যবহৃত হয়", কেবলমাত্র ভাষাগুলির সংজ্ঞা অনুসারে ভুল।

সি ++ পূর্ববর্তী অনুচ্ছেদে সম্মানিত কোনও কিছুর অনুমতি দেয়। এবং যদি কমিটিটি ব্যবহারের প্রস্তাবিত কিছু থাকে তবে এটি ব্যবহার করছে .hযেহেতু এটি আইএসও নথির সমস্ত উদাহরণে দায়ের করা এক্সটেনশন।

উপসংহার:

যতক্ষণ না আপনি .hওভার .hppবা উইস উল্টোটি ব্যবহারের কোনও প্রয়োজন বোধ করেন না, আপনার বিরক্ত করা উচিত নয়। কারণ উভয়ই মানের ক্ষেত্রে একই মানের একটি বৈধ শিরোনাম নাম হবে। আর তাই কিছু যা চান আপনি ব্যবহার করতে .hবা .hppমান এমনকি অন্যান্য অতিরিক্ত বিধিনিষেধ সঙ্গে contradicting যেতে পারে একটি অতিরিক্ত সীমাবদ্ধতা নয় একে অপরের সাথে সামঞ্জস্য। তবে ওপিতে কোনও অতিরিক্ত ভাষার বিধিনিষেধের কথা উল্লেখ না করায় এটাই প্রশ্নের একমাত্র সঠিক এবং অনুমোদনযোগ্য উত্তর

" *। এইচ বা * .এইচপি আপনার শ্রেণীর সংজ্ঞার জন্য " হল:

উভয়ই সমানভাবে সঠিক এবং প্রযোজ্য যতক্ষণ না কোনও বাহ্যিক বিধিনিষেধ উপস্থিত না থাকে।


1 আমি যা জানি, স্পষ্টতই, এটি সেই .hppএক্সটেনশনের সাথে উত্সাহিত কাঠামো ।

2 অবশ্যই কিছু ভবিষ্যতের সংস্করণগুলি এর সাথে কী নিয়ে আসবে তা আমি বলতে পারি না!


7

আমি সম্পাদক এবং অন্যান্য প্রোগ্রামার উভয়ের কাছেই এটি স্পষ্ট করতে সি ++ এর জন্য .hpp পছন্দ করি যে এটি কোনও সি হেডার ফাইলের পরিবর্তে সি ++ শিরোনাম।


6

সি ++ ("সি প্লাস প্লাস") .cpp হিসাবে উপলব্ধি করে

.Hpp এক্সটেনশান সহ শিরোনামযুক্ত ফাইলগুলির একই লজিক্যাল প্রবাহ থাকে না।


6

আপনি নিজের পছন্দগুলি অন্তর্ভুক্ত কল করতে পারেন।

এর মধ্যে পুরো নামটি নির্দিষ্ট করা দরকার #include

আমি পরামর্শ দিচ্ছি যে আপনি যদি ব্যবহার করতে সি এর সাথে কাজ করেন .hএবং কখন সি ++ ব্যবহার করেন .hpp

শেষ পর্যন্ত এটি কেবল একটি সম্মেলন।


5

কোডগিয়ার সি ++ বিল্ডার ডেলফি উত্স ফাইলগুলি থেকে স্বয়ংক্রিয়ভাবে উত্পন্ন হেডার ফাইলগুলির জন্য .hpp এবং আপনার "নিজস্ব" শিরোনাম ফাইলগুলির জন্য .h ফাইলগুলি ব্যবহার করে h

সুতরাং, যখন আমি একটি সি ++ শিরোনাম ফাইল লিখি আমি সর্বদা .h ব্যবহার করি।


5

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


5

বর্জন স্ট্রস্ট্রপ এবং হার্ব সটারের তাদের সি ++ কোর গাইডলাইনে এই প্রশ্নের একটি বিবৃতি পাওয়া গেছে: https://github.com/isocpp/CppCoreGuidlines/blob/master/CppCoreGuidlines.md#S- সোর্স যা সর্বশেষ পরিবর্তনগুলিও উল্লেখ করছে স্ট্যান্ডার্ড এক্সটেনশনে (সি ++ 11, সি ++ 14, ইত্যাদি)

এসএফ .১: আপনার ওয়াই প্রকল্পটি যদি ইতিমধ্যে অন্য কোনও কনভেনশন অনুসরণ না করে তবে কোড ফাইলের জন্য .cpp প্রত্যয় এবং ইন্টারফেস ফাইলগুলির জন্য .h ব্যবহার করুন h

এটি দীর্ঘদিনের সম্মেলন তবে ধারাবাহিকতা আরও গুরুত্বপূর্ণ, সুতরাং আপনার প্রকল্পটি যদি অন্য কিছু ব্যবহার করে তবে তা অনুসরণ করুন। বিঃদ্রঃ

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

নির্দিষ্ট নাম .h এবং .cpp প্রয়োজন হয় না (কেবলমাত্র একটি ডিফল্ট হিসাবে প্রস্তাবিত) এবং অন্যান্য নামগুলি ব্যাপকভাবে ব্যবহৃত হয়। উদাহরণগুলি .hh, .C, এবং .cxx। সমানভাবে এই জাতীয় নাম ব্যবহার করুন। আসল এক্সটেনশানটি ভিন্ন হতে পারে, যদিও আমরা এই দস্তাবেজে, হে এবং সিসিপি> শিরোনাম এবং বাস্তবায়ন ফাইলগুলির জন্য একটি শর্টহ্যান্ড হিসাবে উল্লেখ করি।

আপনার আইডিই (আপনি যদি এটি ব্যবহার করেন) এর পক্ষে পর্যাপ্ত ধারণা সম্পর্কে দৃ strong় মতামত থাকতে পারে।

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


4

এখানে যেমন ইতিমধ্যে উল্লেখ করা হয়েছে, আমি কেবলমাত্র শিরোনামের লাইব্রেরিগুলির মধ্যে .hpp ব্যবহার করতে পছন্দ করি যা টেম্পলেট শ্রেণি / ফাংশন ব্যবহার করে। .Cpp সোর্স ফাইল বা শেয়ার্ড বা স্ট্যাটিক লাইব্রেরি সহ হেডার ফাইলগুলির জন্য আমি .h ব্যবহার করতে পছন্দ করি।

আমার বিকাশ করা বেশিরভাগ লাইব্রেরিগুলি টেমপ্লেট ভিত্তিক এবং কেবলমাত্র শিরোনাম হওয়া দরকার তবে অ্যাপ্লিকেশন লেখার সময় আমি প্রয়োগ থেকে পৃথক ঘোষণাপত্র এবং .h এবং .cpp ফাইলগুলি দিয়ে শেষ করতে পারি tend


3

ভাগ্যক্রমে, এটি সহজ।

আপনি যদি সি ++ এর সাথে কাজ করছেন তবে আপনার .hpp এক্সটেনশনটি ব্যবহার করা উচিত এবং আপনার সি। সি বা সি ++ মিশ্রণের জন্য .h ব্যবহার করা উচিত।


2

আমি .h ব্যবহার করি কারণ এটি মাইক্রোসফ্ট যা ব্যবহার করে এবং তাদের কোড জেনারেটর কী তৈরি করে। শস্যের বিরুদ্ধে যাওয়ার দরকার নেই।


সর্বত্র নয়, প্রচুর উদাহরণে (যেমন WINDDK) তারা ব্যবহার করে hhpp
মার্শ-

13
সি ++ এ আসলে আমি মাইক্রোসফ্টকে 'দানা' বলব না।
developerbmw

@ ব্র্যাট এটি তখনই আপনার কাজ। এবং এটি না হলেও এটি একটি জনপ্রিয় জনপ্রিয় সংকলক।
মার্ক

@ মার্কারান্সম আমি সি ব্যবহারের জন্য মাইক্রোসফ্টের ইতিহাস সম্পর্কে আরও উল্লেখ করছি আইএমও ভিসি ++ একটি দুর্দান্ত সংকলক।
developerbmw

1
@ ডেডাব্লাবএমডাব্লু আমি বলব এমএসভিসি হ'ল উইন্ডোজ প্রোগ্রামগুলির জন্য দানা এবং ব্যক্তিগতভাবে জিএসসি হল * নিক্স প্রোগ্রামের জন্য দানা। এই প্ল্যাটফর্মগুলির জন্য অন্যান্য সংকলকগুলি হ'ল আমার জ্ঞানের সাথে সামঞ্জস্য থাকার চেষ্টা করে।
জাস্টিন সময় - মনিকা

1

"দ্য সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজ, তৃতীয় সংস্করণ বার্জন স্ট্রোস্ট্রপ" -তে, nº1 অবশ্যই সি ++ বইটি পড়তে হবে, তিনি * .h ব্যবহার করেন। সুতরাং আমি অনুমান করি যে সর্বোত্তম অনুশীলনটি * .h ব্যবহার করা।

তবে, * .hpp পাশাপাশি ঠিক আছে!


1
কেউ যদি অন্যের কাছ থেকে এমন কিছু শিখেছিল যা সে অন্যটির কাছ থেকে শিখেছিল (সম্ভবত ভাগ্য একই সাথে) বইটি লিখেছিল, যার কাছে সম্ভবত প্রাথমিক উত্স উপলব্ধ ছিল, তবে এটি তারা কিছুই করছে তবে এর চিহ্নটি নয় মৌমাছি সেরা অনুশীলন।
dhein

কেবল উল্লেখ করার জন্য: আমি আসলে এটি হ্রাস পেয়েছি। তবে আমি যদি এটি "আইএসও / আইসিসি এন 3690" বা "সি সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজ, তৃতীয় সংস্করণ বার্জন স্ট্রোস্ট্রাপ" এর তৃতীয় সংস্করণ "সিএস ++ খসড়া" না বলে অন্যথায় বলে থাকি তবে আমি এটিকে অগ্রাহ্য করতাম। যদিও এটি একটি বৈধ পয়েন্ট হতে পারে, যেহেতু .hppভাষা দ্বারা এখানে কোনও উল্লেখ নেই ।
dhein

9
@জাইবিস আপনি কি জানেন যে বার্জন স্ট্রস্ট্রুপ সি ++ আবিষ্কার করেছেন?
টুমটুমটি

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

1

এটা তোলে পার্থক্য সরঞ্জাম ও মানুষের জন্য সহজ কিছু । এটাই.

প্রচলিত ব্যবহারে (বৃদ্ধির মাধ্যমে ইত্যাদি) .hppবিশেষত সি ++ শিরোনাম। অন্যদিকে, .hনন-সি ++ এর জন্য - কেবল শিরোনাম (প্রধানত সি)। যথাযথভাবে কন্টেন্টের ভাষাটি সনাক্ত করা খুব সহজ কারণ যেহেতু প্রচুর অ-তুচ্ছ ঘটনা রয়েছে তাই এই পার্থক্যটি প্রায়শই ব্যবহারের জন্য প্রস্তুত সরঞ্জামকে সহজ করে তোলে। মানুষের জন্য একবার কনভেনশন পান, এটি মনে রাখাও সহজ এবং ব্যবহার করা সহজ।

যাইহোক, আমি কনভেনশনটি নিজেই সবসময় কাজ করে না বলে প্রত্যাশা করতাম।

  • এটি ভাষার স্পেসিফিকেশন দ্বারা জোর করে না, সি বা সি ++ও নয়। প্রচুর প্রকল্প রয়েছে যা কনভেনশন অনুসরণ করে না। একবার এগুলি মার্জ করার জন্য (মিশ্রিত করা) দরকার পরে এটি ঝামেলা হতে পারে।
  • .hppনিজেই একমাত্র পছন্দ নয়। কেন নয় .hhবা .hxx? (যাইহোক যাইহোক, আপনার সাধারণত ফাইল নাম এবং পাথ সম্পর্কে কমপক্ষে একটি প্রচলিত নিয়ম প্রয়োজন))

আমি ব্যক্তিগতভাবে .hএবং .hppআমার সি ++ প্রকল্পগুলিতে উভয়ই ব্যবহার করি । আমি উপরের সম্মেলনটি অনুসরণ করি না কারণ:

  • প্রকল্পগুলির প্রতিটি অংশ দ্বারা ব্যবহৃত ভাষাগুলি স্পষ্টভাবে নথিভুক্ত করা হয়। একই মডিউলে (ডিরেক্টরি) সি এবং সি ++ মেশানোর কোনও সুযোগ নেই। প্রতিটি তৃতীয় পক্ষের লাইব্রেরির এই নিয়মটি মেনে চলতে হবে।
  • প্রকল্পগুলির দ্বারা ব্যবহৃত ভাষাগত বৈশিষ্ট্য এবং অনুমোদিত ভাষা উপভাষাগুলিও নথিভুক্ত। (প্রকৃতপক্ষে, আমি ব্যবহারযোগ্য স্ট্যান্ডার্ড বৈশিষ্ট্য এবং বাগ ফিক্সের (ভাষার মান অনুসারে) উত্সটিও নথিভুক্ত করি ) সংকলক সামঞ্জস্যতা উল্লেখযোগ্য (জটিল এবং সময়সাপেক্ষ) হতে পারে, বিশেষত এমন একটি প্রকল্পে যা ইতিমধ্যে প্রায় খাঁটি সি ++ এ রয়েছে in ফাইলের নামগুলি এটি পরিচালনা করতে খুব দুর্বল।
  • এমনকি একই সি ++ উপভাষার ক্ষেত্রেও পার্থক্যের জন্য উপযুক্ত আরও গুরুত্বপূর্ণ বৈশিষ্ট্য থাকতে পারে। উদাহরণস্বরূপ, নীচের সম্মেলনটি দেখুন।
  • ফাইলের নামগুলি মূলত ভঙ্গুর মেটাডেটার টুকরো। সম্মেলনের লঙ্ঘন সনাক্ত করা এত সহজ নয়। বিষয়বস্তু ডিল স্থিতিশীল হতে, একটি সরঞ্জাম অবশেষে শুধুমাত্র নামের উপর নির্ভর করে না। এক্সটেনশনের মধ্যে পার্থক্য কেবল একটি ইঙ্গিত। এটি ব্যবহার করা সরঞ্জামগুলিও সর্বদা একই রকম আচরণ করা উচিত নয়, যেমন .hgithub.com এ ফাইলগুলির ভাষা-সনাক্তকরণ । ( এই উত্স ফাইলগুলিকে আরও ভাল মেটাডেটা হওয়ার জন্য শেবাং-এর মতামতের মতো কিছু থাকতে পারে তবে এটি ফাইলের নামগুলির মতো প্রচলিতও নয়, সাধারণভাবে নির্ভরযোগ্যও নয়))

আমি সাধারণত .hppসি ++ শিরোলেখগুলিতে ব্যবহার করি এবং শিরোনামগুলি কেবলমাত্র শিরোনাম- পদ্ধতিতে টেমপ্লেট লাইব্রেরি হিসাবে ব্যবহার করা উচিত (বজায় রাখা) । অন্যান্য শিরোনামগুলির ক্ষেত্রে .h, হয় .cppবাস্তবায়ন হিসাবে সম্পর্কিত ফাইল রয়েছে, বা এটি একটি নন-সি ++ শিরোনাম। দ্বিতীয়টি হেডারের বিষয়বস্তুগুলি মানুষের দ্বারা (বা স্পষ্টভাবে এমবেডেড মেটাডেটা সহ সরঞ্জামগুলির প্রয়োজনে, প্রয়োজন অনুসারে) আলাদা করার জন্য তুচ্ছ।


0

উত্স ফাইলটির বর্ধনের ফলে আপনার বিল্ড সিস্টেমের অর্থ হতে পারে, উদাহরণস্বরূপ, আপনার মেকফাইলে .cppবা .cফাইলগুলির জন্য আপনার একটি নিয়ম থাকতে পারে , বা আপনার সংকলক (যেমন মাইক্রোসফ্ট cl.exe) এক্সটেনশানের উপর নির্ভর করে ফাইলটিকে সি বা সি ++ হিসাবে সংকলন করতে পারে।

আপনাকে #includeনির্দেশের পুরো ফাইলনাম সরবরাহ করতে হবে বলে শিরোনাম ফাইলের এক্সটেনশন অপ্রাসঙ্গিক। আপনি .cযদি চান তবে আপনি অন্য উত্স ফাইলে একটি ফাইল অন্তর্ভুক্ত করতে পারেন, কারণ এটি কেবল একটি পাঠ্য অন্তর্ভুক্ত। আপনার সংকলকটির প্রিপ্রোসেসড আউটপুটটি ডাম্প করার একটি বিকল্প থাকতে পারে যা এটি পরিষ্কার করে দেবে (মাইক্রোসফ্ট: /Pফাইলটিতে /Eপ্রিপ্রোসেস করতে stdout, প্রিপ্রসোসেসে , নির্দেশাবলী /EPবাদ দিতে #line, /Cমন্তব্যগুলি ধরে রাখতে)

আপনি .hppকেবল সি ++ পরিবেশের সাথে প্রাসঙ্গিক ফাইলগুলির জন্য ব্যবহার করতে পারেন , যেমন তারা এমন বৈশিষ্ট্য ব্যবহার করেন যা সিতে সংকলন করবে না use


0

কোনও নির্দিষ্ট এক্সটেনশনের কোনও সুবিধা নেই, এটির ব্যতীত অন্যটির আপনার, সংকলক এবং / অথবা আপনার সরঞ্জামগুলির কাছে আলাদা অর্থ থাকতে পারে। header.hএকটি বৈধ শিরোনাম। header.hppএকটি বৈধ শিরোনাম। header.hhএকটি বৈধ শিরোনাম। header.hxএকটি বৈধ শিরোনাম। h.headerএকটি বৈধ শিরোনাম। this.is.not.a.valid.headerঅস্বীকৃতিতে বৈধ শিরোনাম। ihjkflajfajfklafএকটি বৈধ শিরোনাম। যতক্ষণ না সংকলক নামটি যথাযথভাবে পার্স করতে পারে এবং ফাইল সিস্টেম এটি সমর্থন করে ততক্ষণ এটি বৈধ শিরোনাম এবং এর প্রসারের একমাত্র সুবিধা এটির মধ্যে যা পড়ে।

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

  1. যদি ইতিমধ্যে কোনও প্রতিষ্ঠিত নির্দেশিকা থাকে তবে বিভ্রান্তি রোধ করতে তাদের অনুসরণ করুন।
  2. যদি প্রকল্পের সমস্ত উত্স ফাইলগুলি একই ভাষার জন্য হয় তবে ব্যবহার করুন .h। কোনও অস্পষ্টতা নেই।
  3. যদি কিছু শিরোনাম একাধিক ভাষার সাথে সামঞ্জস্যপূর্ণ হয়, অন্যরা কেবল একটি ভাষার সাথেই সামঞ্জস্যপূর্ণ হয় তবে এক্সটেনশনগুলি সবচেয়ে শৃঙ্খলাবদ্ধ ভাষার উপর ভিত্তি করে হয় যা একটি শিরোনামের সাথে সামঞ্জস্য করে। একটি হেডার সি সঙ্গে সামঞ্জস্যপূর্ণ, অথবা উভয় C ও C ++, পায় .h, একটি হেডার সি ++ সঙ্গে সামঞ্জস্যপূর্ণ কিন্তু সি পায় যখন .hppবা .hhবা সাজানোর কিছু।

এই, অবশ্যই, কিন্তু এক অনেক এক্সটেনশনগুলি পরিচালনা করতে উপায়ে, এবং আপনি অগত্যা আপনার প্রথম ছাপ এমনকি যদি জিনিষ সহজবোধ্য বলে মনে হচ্ছে না বিশ্বাস করতে পারেন। উদাহরণস্বরূপ, আমি .hসাধারণ হেডারগুলির জন্য ব্যবহারের উল্লেখ দেখেছি , এবং .tppশিরোনামগুলির মধ্যে কেবল টেম্প্লেটেড শ্রেণীর সদস্য ফাংশনগুলির সংজ্ঞা রয়েছে এমন .hফাইলগুলির সাথে টেম্প্লেটেড ক্লাসগুলি .tppসংজ্ঞায়িত করে যা তাদের সদস্য ফাংশনগুলি সংজ্ঞায়িত করে ( .hসরাসরি শিরোনামের সাথে উভয়ই থাকে) ফাংশন ঘোষণা এবং সংজ্ঞা)। অন্য উদাহরণের জন্য, ভাল লোকেরা সর্বদা তার বিস্তারে শিরোনামের ভাষা প্রতিবিম্বিত করে, এমনকি দ্ব্যর্থতার কোনও সম্ভাবনা না থাকলেও; তাদের .hকাছে সর্বদা সি হেডার এবং .hpp(বা .hh, বা.hxx, ইত্যাদি) সর্বদা একটি সি ++ শিরোনাম। এবং এখনও আবার, কিছু লোক .h"উত্স ফাইলের সাথে যুক্ত শিরোলেখ" এবং .hpp"ইনডাইনযুক্ত সমস্ত ফাংশন সহ শিরোনাম" ব্যবহার করে।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.