সি এবং সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজে, include
নিম্নরূপে কোণ বন্ধনী ব্যবহার এবং একটি বিবৃতিতে উদ্ধৃতি ব্যবহারের মধ্যে পার্থক্য কী ?
#include <filename>
#include "filename"
সি এবং সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজে, include
নিম্নরূপে কোণ বন্ধনী ব্যবহার এবং একটি বিবৃতিতে উদ্ধৃতি ব্যবহারের মধ্যে পার্থক্য কী ?
#include <filename>
#include "filename"
উত্তর:
অনুশীলনে, পার্থক্যটি সেই স্থানে যেখানে প্রিপ্রসেসর অন্তর্ভুক্ত ফাইলটির জন্য অনুসন্ধান করে।
#include <filename>
একটি বাস্তবায়ন নির্ভর পদ্ধতিতে প্রিপ্রসেসর অনুসন্ধানগুলির জন্য , সাধারণত সংকলক / আইডিই দ্বারা পূর্বনির্ধারিত অনুসন্ধান ডিরেক্টরিগুলিতে। এই পদ্ধতিটি সাধারণত স্ট্যান্ডার্ড লাইব্রেরির শিরোনাম ফাইলগুলি অন্তর্ভুক্ত করতে ব্যবহৃত হয়।
#include "filename"
প্রিপ্রসেসর জন্য প্রথমে একই ডিরেক্টরিতে ডিরেক্টরি সহ ফাইলটি অনুসন্ধান করে এবং তারপরে #include <filename>
ফর্মটির জন্য ব্যবহৃত অনুসন্ধানের পথটি অনুসরণ করে । এই পদ্ধতিটি সাধারণত প্রোগ্রামার-সংজ্ঞায়িত হেডার ফাইলগুলি অন্তর্ভুক্ত করতে ব্যবহৃত হয়।
অনুসন্ধানের পথে জিসিসি ডকুমেন্টেশনে আরও সম্পূর্ণ বিবরণ পাওয়া যায় ।
#include <...>
তবে সিস্টেমে ইনস্টল করা প্যাকেজটি #include "..."
ব্যবহার করে এবং কাছাকাছি সংগ্রহস্থল সংস্করণ ব্যবহার করেছি। আমার পেছনের দিকে থাকতে পারে। যেভাবেই হোক, প্যাকেজড শিরোনামে অন্তর্ভুক্ত রক্ষককে একটি আন্ডারস্কোর দিয়ে উপস্থাপিত করা হয়। (এটি প্যাকেজগুলির জন্য একটি সম্মেলন হতে পারে বা সম্ভবত ইচ্ছাকৃতভাবে দুটি মিশ্রণ প্রতিরোধের একটি উপায় হতে পারে, যদিও সংস্করণ
জানার একমাত্র উপায় হ'ল আপনার প্রয়োগের ডকুমেন্টেশনগুলি পড়া।
ইন সি মান , বিভাগ 6.10.2, অনুচ্ছেদ 2 4 রাজ্য:
ফর্মটির একটি পূর্বনির্ধারিত নির্দেশিকা
#include <h-char-sequence> new-line
শিরোনাম
<
এবং>
ডিলিমিটারগুলির মধ্যে নির্দিষ্ট ক্রম দ্বারা স্বতন্ত্রভাবে চিহ্নিত শিরোনামের জন্য বাস্তবায়ন-সংজ্ঞায়িত জায়গাগুলির ক্রম সন্ধান করে এবং শিরোনামের পুরো বিষয়বস্তু দ্বারা সেই নির্দেশকে প্রতিস্থাপনের কারণ ঘটায় । স্থানগুলি কীভাবে নির্দিষ্ট করা হয় বা শিরোনাম সনাক্ত করা হয় তা প্রয়োগ-সংজ্ঞায়িত।ফর্মটির একটি পূর্বনির্ধারিত নির্দেশিকা
#include "q-char-sequence" new-line
ডিলিমিটারগুলির মধ্যে নির্দিষ্ট ক্রম দ্বারা চিহ্নিত উত্স ফাইলের সম্পূর্ণ বিষয়বস্তু দ্বারা সেই নির্দেশকে প্রতিস্থাপনের কারণ ঘটায়
"
। নামকরণ করা উত্স ফাইলটি একটি প্রয়োগ-সংজ্ঞায়িত পদ্ধতিতে অনুসন্ধান করা হয়। যদি এই অনুসন্ধানটি সমর্থিত না হয়, বা অনুসন্ধান ব্যর্থ হয় তবে নির্দেশটি পুনরায় প্রসেস করা হয় যেন এটি পড়ে#include <h-char-sequence> new-line
>
মূল নির্দেশ থেকে একই রকম ক্রম ( অক্ষর সহ , যদি থাকে) সহফর্মটির একটি পূর্বনির্ধারিত নির্দেশিকা
#include pp-tokens new-line
(এটি আগের দুটি ফর্মের একটির সাথে মেলে না) অনুমোদিত।
include
নির্দেশের পরে প্রিপ্রোসেসিং টোকেনগুলি সাধারণ পাঠ্যের মতোই প্রক্রিয়া করা হয়। (বর্তমানে ম্যাক্রোর নাম হিসাবে সংজ্ঞায়িত প্রতিটি শনাক্তকারী তার প্রস্রোসেসিং টোকেনগুলির প্রতিস্থাপনের তালিকার দ্বারা প্রতিস্থাপিত হয়)) সমস্ত প্রতিস্থাপনের পরে প্রাপ্ত নির্দেশাবলী পূর্ববর্তী দুটি ফর্মের মধ্যে একটির সাথে মেলে। একটি<
এবং একটি>
প্রিপ্রসেসিং টোকেন জোড় বা"
অক্ষরের একটি জুটির মধ্যে প্রোক্রোসিং টোকেনগুলির ক্রমটি একটি একক শিরোনাম নামের প্রিপ্রোসেসিং টোকেনের সাথে সংযুক্ত করে প্রয়োগকরণ-সংজ্ঞায়িত।সজ্ঞা:
এইচ-চর: নতুন লাইন চরিত্র এবং বাদে উত্স চরিত্রের যে কোনও সদস্য সেট করুন
>
কিউ-চর: নতুন লাইন চরিত্র এবং বাদে উত্স চরিত্রের যে কোনও সদস্য সেট করুন
"
<এবং> এর মধ্যে অক্ষরের ক্রমটি অনন্যভাবে একটি শিরোনামকে উল্লেখ করে, যা অগত্যা কোনও ফাইল নয়। বাস্তবায়নগুলি চরিত্রের ক্রমটি তাদের ইচ্ছামত ব্যবহার করতে বেশ মুক্ত। (তবে, বেশিরভাগ ক্ষেত্রে, কেবল এটি ফাইলের নাম হিসাবে বিবেচনা করুন এবং অন্যান্য পোস্টগুলির মতো এটি অন্তর্ভুক্তের পথে অনুসন্ধান করুন ))
যদি #include "file"
ফর্মটি ব্যবহার করা হয়, তবে বাস্তবায়নটি প্রথমে প্রদত্ত নামের একটি ফাইল অনুসন্ধান করে যদি সমর্থন করে। (সমর্থিত) না থাকলে, বা অনুসন্ধান ব্যর্থ হলে, বাস্তবায়ন অন্য ( #include <file>
) ফর্মটি ব্যবহার করার মতো আচরণ করে ।
এছাড়াও, একটি তৃতীয় ফর্ম বিদ্যমান এবং যখন #include
নির্দেশটি উপরের কোনও ফর্মের সাথে মেলে না তখন ব্যবহৃত হয়। এই ফর্মটিতে, #include
নির্দেশের "অপারেশনগুলি" তে কিছু প্রাথমিক প্রাকপ্রসেসিং (যেমন ম্যাক্রো এক্সপেনশন) করা হয় এবং ফলাফলটি অন্য দুটি ফর্মের মধ্যে একটির সাথে মিলবে বলে আশা করা যায়।
<
এবং এর মধ্যবর্তী স্ট্রিংটি ব্যবহার করে >
।
কিছু ভাল উত্তর এখানে সি স্ট্যান্ডার্ডের রেফারেন্স দেয় তবে পসিক্স স্ট্যান্ডার্ডকে ভুলে যায়, বিশেষত সি 99 (যেমন সি সংকলক) কমান্ডের নির্দিষ্ট আচরণ ।
মতে ওপেন গ্রুপ বেজ উল্লেখ ইস্যু 7 ,
-আমি ডিরেক্টরি
শিরোনাম অনুসারে শিরোনামগুলির অনুসন্ধানের জন্য অ্যালগরিদম পরিবর্তন করুন যার নামগুলি যথাযথ পথের নাম নয় যা সাধারণত স্থানগুলিতে সন্ধানের আগে ডিরেক্টরিটির নামের নাম অনুসারে ডিরেক্টরিটি অনুসন্ধান করা হয়। সুতরাং, যাদের নামগুলি ডাবল-কোট ("") এ আবদ্ধ রয়েছে তাদের প্রথমে # অন্তর্ভুক্ত রেখার সাথে ফাইলের ডিরেক্টরিতে অনুসন্ধান করা হবে , তারপরে -I বিকল্পগুলির নামের ডিরেক্টরিতে এবং সাধারণ স্থানে সর্বশেষে অনুসন্ধান করা হবে। যাদের শিরোনামগুলির নাম কোণ বন্ধনী ("<>") এ আবদ্ধ রয়েছে, তাদের শিরোনামটি কেবলমাত্র -I বিকল্পগুলির নামের ডিরেক্টরিতে এবং তারপরে সাধারণ জায়গাগুলিতে অনুসন্ধান করা হবে। -I বিকল্পগুলির মধ্যে নামের ডিরেক্টরিগুলি নির্দিষ্ট ক্রমে অনুসন্ধান করা হবে searchedc99 কমান্ড প্রার্থনা।
সুতরাং, একটি পসিক্স অনুগত পরিবেশে, একটি পসিক্স কমপ্লায়েন্ট সি সংকলক সহ, #include "file.h"
সম্ভবত ./file.h
প্রথমে অনুসন্ধান করতে যাচ্ছে , যেখানে স্টেটমেন্ট .
সহ ফাইলটি রয়েছে সেই ডিরেক্টরিটি যেখানে সম্ভবত প্রথম অনুসন্ধান করতে চলেছে , আপনার সিস্টেমটি কোথায় সংজ্ঞায়িত করা হয়েছে? শিরোনামের জন্য স্বাভাবিক জায়গা (এটি পসিক্স দ্বারা সংজ্ঞায়িত করা হয় না বলে মনে হয়)।#include
#include <file.h>
/usr/include/file.h
/usr/include
c99
- যা সি সংকলকটির পসিক্স নাম। (পোসিএক্স ২০০৮ স্ট্যান্ডার্ডটি খুব শক্তভাবেই সি 11 এর উল্লেখ করতে পারে; পোসিক্স ২০০৮-এর 2013 আপডেটটি যে সি মান হিসাবে উল্লেখ করেছে তা পরিবর্তন করে নি।)
-L
।
জিসিসির ডকুমেন্টেশন দুটির মধ্যে পার্থক্য সম্পর্কে নিম্নলিখিতটি বলে :
ব্যবহারকারী এবং সিস্টেম উভয় শিরোনাম ফাইল প্রিপ্রসেসিং নির্দেশিকা ব্যবহার করে অন্তর্ভুক্ত
‘#include’
। এটির দুটি রূপ রয়েছে:
#include <file>
সিস্টেমের শিরোনাম ফাইলগুলির জন্য এই রূপটি ব্যবহৃত হয়। এটি সিস্টেম ডিরেক্টরিগুলির একটি স্ট্যান্ডার্ড তালিকায় ফাইল নামের একটি ফাইল অনুসন্ধান করে। আপনি
-I
বিকল্পের সাহায্যে এই তালিকায় ডিরেক্টরিগুলি প্রেন্ডেন্ড করতে পারেন ( আমন্ত্রণ দেখুন )।
#include "file"
এই রূপটি আপনার নিজের প্রোগ্রামের শিরোনাম ফাইলগুলির জন্য ব্যবহৃত হয়। এটি বর্তমান ফাইল যুক্ত ডিরেক্টরিতে প্রথমে উদ্ধৃতি ডিরেক্টরিতে এবং তারপরে একই ডিরেক্টরিগুলির জন্য ব্যবহৃত ফাইলের নামের ফাইল অনুসন্ধান করে
<file>
। আপনি-iquote
বিকল্পটি দিয়ে উদ্ধৃতি ডিরেক্টরিগুলির তালিকাতে ডিরেক্টরিগুলি প্রেন্ডেন্ড করতে পারেন ।‘#include’
কোট চিহ্ন বা কোণ বন্ধনী দিয়ে সীমিত করা হোক না কেন এর যুক্তি মন্তব্যগুলির স্বীকৃতিপ্রাপ্ত নয় এবং ম্যাক্রোর নামগুলি প্রসারিত হয় নি এমন স্ট্রিং ধ্রুবকের মতো আচরণ করে। সুতরাং,#include <x/*y>
একটি সিস্টেম শিরোনাম ফাইল নাম অন্তর্ভুক্ত নির্দিষ্ট করেx/*y
।যাইহোক, যদি ব্যাকস্ল্যাশগুলি ফাইলের মধ্যে ঘটে তবে এগুলিকে অক্ষর নয়, সাধারণ পাঠ্য অক্ষর হিসাবে বিবেচনা করা হয়। সি এর স্ট্রিং ধ্রুবকগুলির জন্য উপযুক্ত চরিত্রের পালানোর ক্রমগুলির কোনওটিই প্রক্রিয়াজাত হয় না। সুতরাং,
#include "x\n\\y"
তিনটি ব্যাকস্ল্যাশযুক্ত ফাইলের নাম নির্দিষ্ট করে। (কিছু সিস্টেম '\' কে একটি‘/’
পথের নাম পৃথক হিসাবে ব্যাখ্যা করে these এগুলি সমস্ত একইভাবে ব্যাখ্যা করে only এটি কেবলমাত্র ব্যবহারের জন্য সর্বাধিক বহনযোগ্য‘/’
))ফাইলের নামের পরে লাইনে কিছু আছে (মন্তব্য ব্যতীত) তবে এটি ত্রুটি।
এটা করে:
"mypath/myfile" is short for ./mypath/myfile
সঙ্গে .
পারেন যেখানে ফাইলের ডিরেক্টরি হচ্ছে #include
মধ্যে অন্তর্ভুক্ত করা হয়, এবং / অথবা কম্পাইলার সাম্প্রতিক কাজ করা, এবং / অথবাdefault_include_paths
এবং
<mypath/myfile> is short for <defaultincludepaths>/mypath/myfile
যদি ./
থাকে <default_include_paths>
তবে তা কোনও তফাত্ করে না।
যদি mypath/myfile
অন্য অন্তর্ভুক্ত ডিরেক্টরিতে থাকে তবে আচরণটি সংজ্ঞায়িত।
#include "mypath/myfile"
সমান নয় #include "./mypath/myfile"
। পাইকুকির উত্তর যেমন বলেছে, ডাবল উক্তি সংকলককে একটি বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে অনুসন্ধান করতে বলে - যার জন্য নির্দিষ্ট জায়গাগুলি অনুসন্ধান করা অন্তর্ভুক্ত #include <...>
। (আসলে, এটি সম্ভবত সমতুল্য, তবে কেবল কারণ, উদাহরণস্বরূপ - কমপক্ষে ইউনিক্সের মতো সিস্টেমে /usr/include/mypath/myfile
হিসাবে উল্লেখ করা যেতে পারে /usr/include/./mypath/myfile
))
defaultincludepaths
, এর অর্থ .
(উপরে বর্ণিত হিসাবে) এর অন্য অর্থ দেওয়ার বিপরীতে । এর প্রত্যাশিত পরিণতি #include "..."
এবং উভয়ই দিরপাথে#include <...>
অনুসন্ধান করে
<file>
অন্তর্ভুক্ত অনুসন্ধান করার জন্য প্রাক প্রসেসর বলে -I
ডিরেক্টরি এবং পূর্বনির্ধারিত ডিরেক্টরিগুলি থেকে প্রথম , তারপর গ ফাইল এর ডিরেক্টরির মধ্যে। "file"
অন্তর্ভুক্ত সোর্স ফাইল এর তালিকা অনুসন্ধান করতে প্রাক প্রসেসর বলে প্রথম , এবং তারপর প্রত্যাবর্তন -I
এবং পূর্বনির্ধারিত। সমস্ত গন্তব্য যে কোনওভাবেই অনুসন্ধান করা হয়, কেবল অনুসন্ধানের ক্রমটি আলাদা।
২০১১ স্ট্যান্ডার্ডটি মূলত "১ 16.২ উত্স ফাইল অন্তর্ভুক্তি" -এ অন্তর্ভুক্ত ফাইলগুলি নিয়ে আলোচনা করে।
2 ফর্ম একটি প্রাক নির্দেশিকা
# include <h-char-sequence> new-line
<এবং> ডিলিমিটারগুলির মধ্যে নির্দিষ্ট অনুক্রমের দ্বারা অনন্যভাবে চিহ্নিত শিরোনামের জন্য বাস্তবায়ন-সংজ্ঞায়িত জায়গাগুলির ক্রম সন্ধান করে এবং শিরোনামের পুরো বিষয়বস্তু দ্বারা সেই নির্দেশকে প্রতিস্থাপনের কারণ ঘটায়। স্থানগুলি কীভাবে নির্দিষ্ট করা হয় বা শিরোনাম সনাক্ত করা হয় তা প্রয়োগ-সংজ্ঞায়িত।
3 ফর্ম একটি প্রাক নির্দেশিকা
# include "q-char-sequence" new-line
"বিসীমাবিদদের মধ্যে নির্দিষ্ট ক্রম দ্বারা চিহ্নিত উত্স ফাইলের সম্পূর্ণ বিষয়বস্তু দ্বারা সেই নির্দেশকে প্রতিস্থাপনের কারণ হিসাবে চিহ্নিত করা হয় named নামকরণ উত্স ফাইলটি একটি বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে অনুসন্ধান করা হয় this যদি এই অনুসন্ধানটি সমর্থন না করা হয়, বা যদি অনুসন্ধান ব্যর্থ হয় , নির্দেশটি পুনরায় প্রসেস করা হয় যেন এটি পড়ে read
# include <h-char-sequence> new-line
মূল নির্দেশ থেকে অভিন্ন সমন্বিত ক্রম (>> অক্ষর সহ, যদি থাকে) থাকে
নোট করুন যে ফাইলটি খুঁজে পাওয়া না গেলে ফর্মটি "xxx"
ফর্মের অবনতি হয় <xxx>
। বাকিটি বাস্তবায়ন-সংজ্ঞায়িত।
-I
ব্যবসাটি নির্দিষ্ট করা হয়েছে তার একটি রেফারেন্স সরবরাহ করতে পারেন ?
-I
।
#include <file.h>
সংকলকটিকে তার "অন্তর্ভুক্ত" ডিরেক্টরিতে শিরোনামটি অনুসন্ধান করতে বলে, যেমন: MinGW এর জন্য সংকলক সিটিতে অনুসন্ধান করবে file.h
: \ MinGW \ অন্তর্ভুক্ত wherever বা যেখানেই আপনার সংকলক ইনস্টল করা আছে।
#include "file"
কম্পাইলারকে বর্তমান ডিরেক্টরিটি (অর্থাত্ ডিরেক্টরিটি যেখানে উত্স ফাইলটি থাকে) অনুসন্ধান করতে বলে file
।
আপনি -I
এটি জিসিসির জন্য পতাকাটি ব্যবহার করতে পারেন যে এটি যখন কোণযুক্ত বন্ধনীগুলির সাথে অন্তর্ভুক্ত হয় তখন এটি পরে ডিরেক্টরিতে শিরোনামগুলি অনুসন্ধান করা উচিত -I
। জিসিসি পতাকাটির পরে ডিরেক্টরিটিকে ডিরেক্টরি বলে মনে করবে includes
।
উদাহরণস্বরূপ, যদি myheader.h
আপনার নিজের ডিরেক্টরিতে কোনও ফাইল কল করা #include <myheader.h>
থাকে তবে আপনি পতাকাটি দিয়ে জিসিসি কল করলে আপনি বলতে পারেন -I .
(এটি নির্দেশ করে যে এটি বর্তমান ডিরেক্টরিতে অন্তর্ভুক্ত রয়েছে))
-I
পতাকা ছাড়াই আপনাকে #include "myheader.h"
ফাইলটি অন্তর্ভুক্ত করতে বা আপনার সংকলকটির ডিরেক্টরিতে যেতে myheader.h
হবে include
।
মান অনুসারে - হ্যাঁ, তারা পৃথক:
ফর্মটির একটি পূর্বনির্ধারিত নির্দেশিকা
#include <h-char-sequence> new-line
শিরোনাম
<
এবং>
ডিলিমিটারগুলির মধ্যে নির্দিষ্ট ক্রম দ্বারা স্বতন্ত্রভাবে চিহ্নিত শিরোনামের জন্য বাস্তবায়ন-সংজ্ঞায়িত জায়গাগুলির ক্রম সন্ধান করে এবং শিরোনামের পুরো বিষয়বস্তু দ্বারা সেই নির্দেশকে প্রতিস্থাপনের কারণ ঘটায়। স্থানগুলি কীভাবে নির্দিষ্ট করা হয় বা শিরোনাম সনাক্ত করা হয় তা প্রয়োগ-সংজ্ঞায়িত।ফর্মটির একটি পূর্বনির্ধারিত নির্দেশিকা
#include "q-char-sequence" new-line
"
ডিলিমিটারগুলির মধ্যে নির্দিষ্ট ক্রম দ্বারা চিহ্নিত উত্স ফাইলের সম্পূর্ণ বিষয়বস্তু দ্বারা সেই নির্দেশকে প্রতিস্থাপনের কারণ ঘটায় । নামকরণ করা উত্স ফাইলটি একটি প্রয়োগ-সংজ্ঞায়িত পদ্ধতিতে অনুসন্ধান করা হয়। যদি এই অনুসন্ধানটি সমর্থিত না হয়, বা অনুসন্ধান ব্যর্থ হয় তবে নির্দেশটি পুনরায় প্রসেস করা হয় যেন এটি পড়ে#include <h-char-sequence> new-line
>
মূল নির্দেশ থেকে একই রকম ক্রম ( অক্ষর সহ , যদি থাকে) সহফর্মটির একটি পূর্বনির্ধারিত নির্দেশিকা
#include pp-tokens new-line
(এটি আগের দুটি ফর্মের একটির সাথে মেলে না) অনুমোদিত।
include
নির্দেশের পরে প্রিপ্রোসেসিং টোকেনগুলি সাধারণ পাঠ্যের মতোই প্রক্রিয়া করা হয়। (বর্তমানে ম্যাক্রোর নাম হিসাবে সংজ্ঞায়িত প্রতিটি শনাক্তকারী তার প্রস্রোসেসিং টোকেনগুলির প্রতিস্থাপনের তালিকার দ্বারা প্রতিস্থাপিত হয়)) সমস্ত প্রতিস্থাপনের পরে প্রাপ্ত নির্দেশাবলী পূর্ববর্তী দুটি ফর্মের মধ্যে একটির সাথে মেলে। একটি<
এবং একটি>
প্রিপ্রসেসিং টোকেন জোড় বা"
অক্ষরের একটি জুটির মধ্যে প্রোক্রোসিং টোকেনগুলির ক্রমটি একটি একক শিরোনাম নামের প্রিপ্রোসেসিং টোকেনের সাথে সংযুক্ত করে প্রয়োগকরণ-সংজ্ঞায়িত।সজ্ঞা:
এইচ-চর: নতুন লাইন চরিত্র এবং বাদে উত্স চরিত্রের যে কোনও সদস্য সেট করুন
>
কিউ-চর: নতুন লাইন চরিত্র এবং বাদে উত্স চরিত্রের যে কোনও সদস্য সেট করুন
"
নোট করুন যে মান বাস্তবায়ন-সংজ্ঞায়িত শিষ্টাচারগুলির মধ্যে কোনও সম্পর্ককে বলে না। প্রথম রূপটি একটি বাস্তবায়ন-সংজ্ঞায়িত উপায়ে অনুসন্ধান করে এবং অন্যটি (সম্ভবত অন্য) বাস্তবায়ন-সংজ্ঞায়িত উপায়ে অনুসন্ধান করে। মানকটি নির্দিষ্ট করে যে কিছু অন্তর্ভুক্ত ফাইল উপস্থিত থাকতে হবে (উদাহরণস্বরূপ, <stdio.h>
)।
সাধারণত আপনার কম্পাইলারটির জন্য আপনাকে ম্যানুয়ালটি পড়তে হবে, তবে সাধারণত (traditionতিহ্য অনুসারে) #include "..."
ফর্মটি #include
প্রথমে যে ফাইলটি খুঁজে পাওয়া যায় তার ডিরেক্টরি #include <...>
অনুসন্ধান করে এবং তারপরে যে ফর্মগুলি অনুসন্ধান করে (যে পথটি অন্তর্ভুক্ত করে, উদাহরণস্বরূপ সিস্টেম শিরোনাম) )।
দুর্দান্ত উত্তরের জন্য ধন্যবাদ, esp। অ্যাডাম স্টেলমাস্কিজিক এবং পাইকুকি, এবং আইব।
অনেক প্রোগ্রামারদের মতো, আমি "myApp.hpp"
অ্যাপ্লিকেশন নির্দিষ্ট ফাইলগুলির <libHeader.hpp>
জন্য ফর্মটি এবং গ্রন্থাগার এবং সংকলক সিস্টেম ফাইলগুলির জন্য ফর্ম, যেমন নির্দিষ্ট করা ফাইল /I
এবং INCLUDE
পরিবেশের ভেরিয়েবলের জন্য আদর্শ ব্যবহার করে বছরের পর বছর ধরে ব্যবহার করেছি।
তবে সি স্ট্যান্ডার্ডটি জানিয়েছে যে অনুসন্ধান আদেশটি বাস্তবায়ন নির্দিষ্ট, যা বহনযোগ্যতা জটিল করে তুলতে পারে। বিষয়টিকে আরও খারাপ করার জন্য, আমরা জাম ব্যবহার করি, যা স্বয়ংক্রিয়ভাবে চিত্রগুলি অন্তর্ভুক্ত করে যেখানে অন্তর্ভুক্ত ফাইলগুলি রয়েছে figures আপনার অন্তর্ভুক্ত ফাইলগুলির জন্য আপনি আপেক্ষিক বা পরম পথ ব্যবহার করতে পারেন। অর্থাত
#include "../../MyProgDir/SourceDir1/someFile.hpp"
এমএসভিএসের পুরানো সংস্করণগুলিতে ডাবল ব্যাকস্ল্যাশগুলি (\\) প্রয়োজন, তবে এখন এটি প্রয়োজন হয় না। জানি না কখন বদলেছে। 'নিক্সের সাথে সামঞ্জস্যের জন্য কেবল ফরওয়ার্ড স্ল্যাশ ব্যবহার করুন (উইন্ডোজ এটি স্বীকার করবে)।
আপনি যদি সত্যিই এটি সম্পর্কে উদ্বিগ্ন "./myHeader.h"
হন তবে উত্স কোড হিসাবে একই ডিরেক্টরিতে অন্তর্ভুক্ত ফাইলের জন্য ব্যবহার করুন (আমার বর্তমান, খুব বড় প্রকল্পে কিছু নকল রয়েছে যার মধ্যে ফাইলের নাম ছড়িয়ে আছে - সত্যই একটি কনফিগারেশন পরিচালনার সমস্যা)।
এখানে দুটিই MSDN ব্যাখ্যা আপনাদের সুবিধার জন্য এখানে অনুলিপি করেছে)।
উদ্ধৃত ফর্ম
প্রিপ্রসেসর অনুসন্ধানগুলি এই ক্রমে ফাইলগুলি অন্তর্ভুক্ত করে:
- ফাইল হিসাবে একই ডিরেক্টরিতে # অন্তর্ভুক্ত বিবৃতি রয়েছে।
- বর্তমানে খোলার ডিরেক্টরিগুলিতে ফাইলগুলি অন্তর্ভুক্ত করা হয়েছে, বিপরীত ক্রমে যা
সেগুলি খোলা হয়েছিল। অনুসন্ধান পিতামাতার ডিরেক্টরিতে ফাইলের অন্তর্ভুক্ত হয় এবং
কোনও পিতামহ অন্তর্ভুক্ত ফাইলগুলির ডিরেক্টরিগুলির মাধ্যমে উপরের দিকে অবিরত থাকে।- প্রতিটি
/I
সংকলক বিকল্প দ্বারা নির্দিষ্ট করা সেই পথ ধরে ।INCLUDE
পরিবেশের পরিবর্তনশীল দ্বারা নির্দিষ্ট করা পথগুলি বরাবর ।কোণ-বন্ধনী ফর্ম
প্রিপ্রসেসর অনুসন্ধানগুলি এই ক্রমে ফাইলগুলি অন্তর্ভুক্ত করে:
- প্রতিটি
/I
সংকলক বিকল্প দ্বারা নির্দিষ্ট করা সেই পথ ধরে ।- কমান্ড লাইনে সংকলন ঘটে যখন
INCLUDE
পরিবেশের ভেরিয়েবল দ্বারা নির্দিষ্ট করা পথগুলি বরাবর ।
কমপক্ষে জিসিসি সংস্করণ <= 3.0 এর জন্য, কোণ-বন্ধনী ফর্ম অন্তর্ভুক্ত ফাইল এবং এর মধ্যে একটির মধ্যে নির্ভরতা তৈরি করে না।
সুতরাং যদি আপনি নির্ভরতা বিধি তৈরি করতে চান (উদাহরণের জন্য জিসিসি-এম বিকল্পটি ব্যবহার করে), আপনাকে অবশ্যই নির্ভরযোগ্যতা গাছের অন্তর্ভুক্ত থাকা ফাইলগুলির জন্য উদ্ধৃত ফর্মটি ব্যবহার করতে হবে।
জন্য #include ""
একটি কম্পাইলার স্বাভাবিকভাবে ফাইল যা রয়েছে সেটা অন্তর্ভুক্ত এবং তারপর অন্যান্য ফোল্ডার ফোল্ডার অনুসন্ধান করে। জন্য #include <>
কম্পাইলার বর্তমান ফাইলের ফোল্ডারের অনুসন্ধান করে না।
<filename>
এবং "filename"
বাস্তবায়ন-সংজ্ঞায়িত জায়গাগুলি অনুসন্ধান করে।
আপনি যখন # অন্তর্ভুক্ত <ফাইল ফাইল> ব্যবহার করেন, প্রাক-প্রসেসর সি \ সি ++ শিরোনাম ফাইলগুলির ডিরেক্টরিতে (stdio.h \ cstdio, স্ট্রিং, ভেক্টর ইত্যাদি) ফাইল সন্ধান করে। তবে, আপনি যখন # অন্তর্ভুক্ত "ফাইলের নাম" ব্যবহার করেন: প্রথমে, প্রি-প্রসেসর বর্তমান ডিরেক্টরিতে ফাইলটি সন্ধান করে এবং যদি এটি এখানে না থাকে - তিনি সি \ সি ++ হেডার ফাইলগুলির ডিরেক্টরিতে এটি সন্ধান করছেন।
#include
নির্দেশিকা মোটেই ফাইলের সাথে কঠোরভাবে সম্পর্কিত নয়।
অ্যাঙ্গেল বন্ধনী সহ একটি # অন্তর্ভুক্তি ফাইলটি অন্তর্ভুক্ত করার জন্য একটি "প্রয়োগের উপর নির্ভরশীল জায়গাগুলি তালিকা" অনুসন্ধান করবে (যা "সিস্টেমের শিরোনাম" বলার একটি অত্যন্ত জটিল উপায়)।
উদ্ধৃতি সহ একটি # অন্তর্ভুক্ত কেবল একটি ফাইল অনুসন্ধান করবে (এবং, "বাস্তবায়ন-নির্ভর পদ্ধতিতে", ব্লিহ)। যার অর্থ, সাধারণ ইংরেজিতে, আপনি যে টথটি টস করেছেন তাতে / ফাইল নামটি প্রয়োগ করার চেষ্টা করবে এবং কোনও সিস্টেমের পথ তৈরি করবে না বা অন্যথায় এটির সাথে ছলছল করবে না।
এছাড়াও, যদি # অন্তর্ভুক্ত "" ব্যর্থ হয় তবে এটি স্ট্যান্ডার্ড অনুসারে # অন্তর্ভুক্ত <> হিসাবে পুনরায় পড়তে হবে।
জিসিসি ডকুমেন্টেশন একটি (কম্পাইলার নির্দিষ্ট) বর্ণনা যা যদিও জিসিসি নির্দিষ্ট এবং মান হচ্ছে, আইএসও মান অ্যাটর্নি-শৈলী আলাপ চেয়ে বুঝতে অনেক সহজ আছে।
zlib.h
আমার 'ব্যবহারকারীর' অনুসন্ধানের পাথগুলিতে রয়েছি এবং সিস্টেম অনুসন্ধানের পথে একটি আলাদা সংস্করণ বিদ্যমান, তারপরে কি #include <zlib.h>
সিস্টেম সংস্করণটি অন্তর্ভুক্ত করা যায় এবং #include "zlib.h"
আমার নিজেরটি অন্তর্ভুক্ত থাকে?
#include "filename" // User defined header
#include <filename> // Standard library header.
উদাহরণ:
ফাইলের নাম এখানে Seller.h
:
#ifndef SELLER_H // Header guard
#define SELLER_H // Header guard
#include <string>
#include <iostream>
#include <iomanip>
class Seller
{
private:
char name[31];
double sales_total;
public:
Seller();
Seller(char[], double);
char*getName();
#endif
শ্রেণি প্রয়োগের ক্ষেত্রে (উদাহরণস্বরূপ, Seller.cpp
এবং অন্যান্য ফাইলগুলিতে ফাইলটি ব্যবহৃত হবে Seller.h
), ব্যবহারকারী দ্বারা সংজ্ঞায়িত শিরোনামটি এখন অন্তর্ভুক্ত করা উচিত:
#include "Seller.h"
#include <>
পূর্বনির্ধারিত শিরোলেখ ফাইলগুলির জন্যযদি হেডার ফাইলটি পূর্বনির্ধারিত থাকে তবে আপনি কেবল কৌনিক বন্ধনীগুলিতে শিরোনাম ফাইলের নাম লিখতে পারেন এবং এটি দেখতে এটির মতো হবে (ধরে নেওয়া আমাদের একটি পূর্বনির্ধারিত শিরোনাম ফাইলের নাম আইওস্ট্রিম রয়েছে):
#include <iostream>
#include " "
প্রোগ্রামার সংজ্ঞায়িত করে শিরোনাম ফাইলগুলির জন্যআপনি যদি (প্রোগ্রামার) নিজের শিরোনামের ফাইলটি লিখে থাকেন তবে আপনি শিরোনামের ফাইলের নাম উদ্ধৃতিতে লিখবেন। সুতরাং, ধরুন যে আপনি একটি শিরোনামযুক্ত ফাইলটি লিখেছেন myfile.h
তবে এটি এই ফাইলটি অন্তর্ভুক্ত করার জন্য আপনি কীভাবে অন্তর্ভুক্ত নির্দেশিকাটি ব্যবহার করবেন তার একটি উদাহরণ:
#include "myfile.h"
এখানে উত্তরগুলির মধ্যে অনেকগুলি ফাইল সন্ধানের জন্য সংকলকটি যে পাথগুলিতে অনুসন্ধান করবে সেগুলিকে কেন্দ্র করে। যদিও বেশিরভাগ সংকলক এটি করেন, একটি মাননীয় সংকলককে স্ট্যান্ডার্ড শিরোনামের প্রভাবগুলির সাথে প্রিপ্রোগ্র্যাম করার অনুমতি দেওয়া হয়, এবং চিকিত্সা করার জন্য,#include <list>
একটি সুইচ হিসাবে , এবং এটি কোনও ফাইল হিসাবে উপস্থিত থাকার প্রয়োজন নেই।
এটি নিখুঁত অনুমানমূলক নয়। কমপক্ষে একটি সংকলক রয়েছে যা সেভাবে কাজ করে। #include <xxx>
কেবলমাত্র মানক শিরোনাম সহ ব্যবহার করার পরামর্শ দেওয়া হয়।
#include <abc.h>
স্ট্যান্ডার্ড লাইব্রেরি ফাইল অন্তর্ভুক্ত করতে ব্যবহৃত হয়। সুতরাং সংকলকটি যেখানে স্ট্যান্ডার্ড লাইব্রেরির শিরোনামগুলি অবস্থান করছে তা পরীক্ষা করবে।
#include "xyz.h"
সংকলকটিকে ব্যবহারকারী-সংজ্ঞায়িত শিরোলেখ ফাইলগুলি অন্তর্ভুক্ত করতে বলবে। সুতরাং সংকলক বর্তমান ফোল্ডার বা -I
সংজ্ঞায়িত ফোল্ডারে এই শিরোলেখ ফাইলগুলির জন্য পরীক্ষা করবে will
সি ++ এ দুটি উপায়ে একটি ফাইল অন্তর্ভুক্ত করুন:
প্রথমটি হল # অন্তর্ভুক্ত যা প্রিপ্রসেসরটিকে পূর্বনির্ধারিত ডিফল্ট অবস্থানে ফাইলটি সন্ধান করতে বলে। এই অবস্থানটি প্রায়শই একটি অন্তর্ভুক্ত পরিবেশের পরিবর্তনশীল যা ফাইলগুলি অন্তর্ভুক্ত করার পথটিকে বোঝায়।
এবং দ্বিতীয় ধরণটি হল # অন্তর্ভুক্ত "ফাইলের নাম" যা প্রিপ্রসেসরটিকে বর্তমান ডিরেক্টরিতে ফাইলটি সন্ধান করতে বলছে, তারপরে ব্যবহারকারীরা সেট আপ করা পূর্বনির্ধারিত অবস্থানগুলিতে এটি সন্ধান করুন।
প্রথমে, বর্তমান ডিরেক্টরিতে হেডার ফাইলের উপস্থিতি সন্ধান করা হয় সেখান থেকে নির্দেশনা চাওয়া হয়েছে। যদি এটি না পাওয়া যায় তবে এটি স্ট্যান্ডার্ড সিস্টেম ডিরেক্টরিগুলির পূর্বনির্ধারিত তালিকায় অনুসন্ধান করে।
এটি বর্তমান ডিরেক্টরিতে শিরোলেখ ফাইলটির উপস্থিতি সন্ধান করে যেখান থেকে নির্দেশনা চাওয়া হয়।
সঠিক অনুসন্ধান ডিরেক্টরি তালিকা লক্ষ্য সিস্টেমের উপর নির্ভর করে, কীভাবে জিসিসি কনফিগার করা হয়েছে, এবং এটি কোথায় ইনস্টল করা হয়েছে। আপনি আপনার জিসিসি সংকলকটির অনুসন্ধান ডিরেক্টরি তালিকাটি এটি -v বিকল্পের সাথে চালিয়ে সন্ধান করতে পারেন।
আপনি - I dir ব্যবহার করে অনুসন্ধানের পথে অতিরিক্ত ডিরেক্টরি যুক্ত করতে পারেন , যার ফলে বর্তমান ডিরেক্টরিটি (নির্দেশকের উদ্ধৃতি ফর্মের জন্য) এবং মানক ডিরেক্টরি ডিরেক্টরিগুলির আগে ডিয়ার অনুসন্ধান করা হবে।
মূলত, "xxx" ফর্মটি বর্তমান ডিরেক্টরিতে অনুসন্ধান ছাড়া কিছুই নয়; যদি ফর্মটি পড়ে না পাওয়া যায়
#include "header.h"
ফর্মের বিবরণটি নির্ভুল নয়, @ ব্যক্তিগত / ক্লাউড। আমি পাইকুকি এবং ইয়ান ড্রোনউডের উত্তরটিকে সবচেয়ে প্রাসঙ্গিক বলে বিবেচনা করি কারণ তারা তাদের তথ্যটি কোথা থেকে আসে তা সনাক্ত করে। আমি পুরোপুরি সন্তোষজনক হওয়ার মতো শীর্ষে-পোষ্ট করা উত্তর খুঁজে পাই না।
#include <filename>
যখন একটি সিস্টেম ফাইল উল্লেখ করা হচ্ছে ব্যবহার করা হয়। এটি একটি শিরোনাম ফাইল যা সিস্টেমের ডিফল্ট লোকেশনগুলিতে /usr/include
বা এর মতো পাওয়া যায় /usr/local/include
। আপনার নিজস্ব ফাইলগুলির জন্য যা আপনাকে অন্য একটি প্রোগ্রামে অন্তর্ভুক্ত করতে হবে আপনাকে #include "filename"
সিনট্যাক্সটি ব্যবহার করতে হবে ।
"<ফাইলের নাম>" স্ট্যান্ডার্ড সি লাইব্রেরির অবস্থানগুলিতে অনুসন্ধান করে
যদিও "ফাইলের নাম" বর্তমান ডিরেক্টরিতে অনুসন্ধান করে।
আদর্শভাবে, আপনি স্ট্যান্ডার্ড সি লাইব্রেরির জন্য <...> এবং আপনি যে লাইব্রেরিগুলি লিখেছেন এবং বর্তমান ডিরেক্টরিতে উপস্থিত রয়েছে তার জন্য "..." ব্যবহার করবেন।
সহজ সাধারণ নিয়মটি হ'ল সংকলকটির সাথে আসা শিরোনাম ফাইলগুলি অন্তর্ভুক্ত করতে কোণযুক্ত বন্ধনী ব্যবহার করা। অন্য কোনও হেডার ফাইল অন্তর্ভুক্ত করতে ডাবল উদ্ধৃতি ব্যবহার করুন। বেশিরভাগ সংকলক এটি এইভাবে করেন।
1.9 - শিরোনাম ফাইলগুলি প্রাক প্রসেসরের নির্দেশাবলী সম্পর্কে আরও বিশদে ব্যাখ্যা করে। আপনি যদি কোনও শিক্ষানবিস প্রোগ্রামার হন তবে সেই পৃষ্ঠাটি আপনাকে সমস্ত কিছু বুঝতে সহায়তা করবে। আমি এখান থেকে শিখেছি, এবং আমি এটি কাজ করে চলেছি।
#include <filename>
আপনি যখন সি / সি ++ সিস্টেম বা সংকলক লাইব্রেরির হেডার ফাইলটি ব্যবহার করতে চান তখন ব্যবহৃত হয়। এই লাইব্রেরিগুলি stdio.h, string.h, math.h ইত্যাদি হতে পারে can
#include "path-to-file/filename"
আপনি যখন নিজের প্রকল্পের ফোল্ডারে বা অন্য কোথাও থাকা আপনার নিজস্ব কাস্টম শিরোনাম ফাইলটি ব্যবহার করতে চান তখন ব্যবহৃত হয়।
প্রিপ্রোসেসর এবং হেডার সম্পর্কে আরও তথ্যের জন্য For সি পড়ুন - প্রাক প্রসেসরগুলি ।
#include <filename>
#include "filename"
#include <filename>
এবং সেই শিরোলেখ ফাইলটি সন্ধান করুন যেখানে সিস্টেম শিরোনাম ফাইলগুলি সঞ্চয় করে।#include <filename>
।বর্তমান কনফিগারেশনের উপর ভিত্তি করে gcc ব্যবহার করে আপনার সিস্টেমে অনুসন্ধানের আদেশটি দেখতে, আপনি নিম্নলিখিত কমান্ডটি কার্যকর করতে পারেন। আপনি এখানে এই আদেশটি সম্পর্কে আরও বিস্তারিত জানতে পারেন
cpp -v /dev/null -o /dev/null
অ্যাপল এলএলভিএম সংস্করণ 10.0.0 (ঝনঝন -100.10.44.2)
লক্ষ্য: x86_64-আপেল-ডারউইন 18.0.0
থ্রেড মডেল: পিক্স ইনস্টলডির : গ্রন্থাগার / বিকাশকারী / কমান্ডলাইনটুলস / ইউএসআর / বিন
"/ লাইব্রেরি / ডেভেলপার / কমান্ডলাইনটুলস / ইউএসআর / বিন / ঝনঝন" -সিসি 1-ট্রিপল x86_64-আপেল-ম্যাকোসেক্স 10.14.0 -পরিচালিত-অবজেক্ট-ইসা-ব্যবহার -Werror = অবমূল্যায়ন-অবজেক্ট-ইসা-ব্যবহার -E-ডিসাইজেবল-মুক্ত - অক্ষম-এলএলভিএম-যাচাইকারী-ডিস্কার্ড-মান-নাম -মাইন-ফাইল-নাম নাল -মিল্রোকেশন-মডেল পিক-পিক-স্তর 2 -মথ্রেড-মডেল পিক্সিক -মিডিসেবল-এফপি-এলিমি -ফ্নো-কড়া-রিটার্ন-ম্যাসম-ক্রোবজ - মুনউইন্ড-টেবিলগুলি -তারেটেজ-সিপিইউ পেনারিন -ডওয়ার্ফ-কলাম-তথ্য -ডিবুগার-টিউনিং = এলডিবি-টার্গেট-লিংক-সংস্করণ 409.12 -ভি-রিসোর্স-ডির / লাইব্রেরি / ডেভেলপার / কম্যান্ডলাইনটুলস / এসআর / লিবি / ক্লাং ১০০.০.০ - isysroot / লাইব্রেরি / ডেভেলপার / কম্যান্ডলাইনটুলস / এসডিকেস / ম্যাকসএক্স 10.14.sdk -I / usr / স্থানীয় / অন্তর্ভুক্ত -fdebug- সংকলন-ডির / ব্যবহারকারী / হোগ্রস্টম -ফেরার-সীমা 19 -ফামেসেজ দৈর্ঘ্য 80-স্ট্যাক-প্রটেক্টর 1 -ফ্লকস -ফেনকোড-এক্সটেন্ডেড-ব্লক-সিগনেচার -fobjc- রানটাইম = ম্যাকোসেক্স -10.14।0 -fmax-type-align = 16 -fdiagnostics-show-વિકલ્પ -fcolor- ডায়াগনস্টিকস-ট্র্যাডিশনাল-সিপিপি -o - -xc / দেব / নাল
ক্ল্যাং-সিসি সংস্করণ 10.0.0 (ক্ল্যাং -1000.10.44.2) ডিফল্ট লক্ষ্য x86_64-আপেল-ডারউইন 18.0.0 অস্তিত্বহীন ডিরেক্টরি উপেক্ষা "/ লাইব্রেরি / ডেভেলপার / কমন্ডলাইনটুলস / এসডি কে / ম্যাকোএসএক্স 10.14.sdk/usr/local/inc समावेश" অস্তিত্বহীন ডিরেক্টরি "/ লাইব্রেরি / ডেভেলপার / কম্যান্ডলাইনটুলস / এসডিকে / ম্যাকসএক্স ১০.১৪.এসডিকি / লাইব্রেরি / ফ্রেমওয়ার্কস"
# অন্তর্ভুক্ত "..." অনুসন্ধান এখানে শুরু হয়:
# অন্তর্ভুক্ত <...> অনুসন্ধান এখানে শুরু হয়:
/ ইউএসআর / স্থানীয় / অন্তর্ভুক্ত
/ লাইব্রেরি / বিকাশকারী / কমান্ডলাইনটুলস / ইউএসআর / লিবিব / ক্ল্যাং / 10.0.0 / অন্তর্ভুক্ত
/ লাইব্রেরি / বিকাশকারী / কমান্ডলাইনটুলস / ইউএসআর / অন্তর্ভুক্ত / লাইব্রেরি / ডেভেলপার /
কম্যান্ডলাইনটুলস
/ এসডিকে / ম্যাকোএসএক্স 10.14.এসডিকি / ইউএস / অন্তর্ভুক্ত / লাইব্রেরি / বিকাশকারী / কমান্ডলাইনটুলস / এসডিকে / ম্যাকোএসএক্স ১০.১৪.এসডিকি / সিস্টেম / গ্রন্থাগার / ফ্রেমওয়ার্ক (ফ্রেমওয়ার্ক ডিরেক্টরি)
অনুসন্ধান তালিকার সমাপ্তি।
# অন্তর্ভুক্ত বিবৃতি লেখার দুটি উপায় রয়েছে exists এগুলি হ'ল:
#include"filename"
#include<filename>
প্রতিটি রূপের অর্থ
#include"mylib.h"
এই কমান্ডটি mylib.h
বর্তমান ডিরেক্টরিতে ফাইলটির পাশাপাশি সুনির্দিষ্ট ডিরেক্টরিগুলির তালিকা হিসাবে নির্ধারিত ডিরেক্টরিগুলির তালিকা অনুসন্ধান করবে যা সেট আপ করা যেতে পারে up
#include<mylib.h>
এই কমান্ডটি mylib.h
কেবলমাত্র ডিরেক্টরিগুলির নির্দিষ্ট তালিকার মধ্যে ফাইলটি সন্ধান করবে।
অন্তর্ভুক্ত অনুসন্ধানের পথটি ডিরেক্টরিগুলির একটি তালিকা ছাড়া আর কিছুই নয় যা ফাইল অন্তর্ভুক্ত হওয়ার জন্য অনুসন্ধান করা হবে if বিভিন্ন সি সংকলক আপনাকে অনুসন্ধানের পথটি আলাদাভাবে শিখতে দেয়।