আমি ভাবার কোনও সুবিধা নেই (তবে নীচে জেসনসকে দ্রষ্টব্য দেখুন), কোনও ফাংশন বা সাবরুটিন হিসাবে কোডের একটি লাইন মোড়ানো। সম্ভবত আপনি এই ফাংশনটির নাম "পঠনযোগ্য" রাখতে পারেন। তবে আপনি ঠিক পাশাপাশি লাইন মন্তব্য করতে পারেন। এবং যেহেতু কোনও ফাংশনে কোডের একটি লাইন মোড়ানোর জন্য কোড মেমোরি, স্ট্যাক স্পেস এবং কার্যকর করার সময় লাগে আমার কাছে মনে হয় এটি বেশিরভাগই পাল্টা-উত্পাদনশীল। একটি শিক্ষণ পরিস্থিতিতে? এটি কিছু অর্থ হতে পারে। তবে এটি নির্ভর করে শিক্ষার্থীদের ক্লাস, তাদের প্রস্তুতি আগে, পাঠ্যক্রম এবং শিক্ষকের উপর। বেশিরভাগ ক্ষেত্রে, আমি মনে করি এটি একটি ভাল ধারণা নয়। তবে এটাই আমার মতামত।
যা আমাদের নীচের লাইনে নিয়ে আসে। আপনার বিস্তৃত প্রশ্ন ক্ষেত্রটি কয়েক দশক ধরে, কিছু বিতর্কের বিষয় এবং আজও কিছু বিতর্কের বিষয় হয়ে দাঁড়িয়েছে। সুতরাং, কমপক্ষে আমি আপনার প্রশ্নটি পড়ার সাথে সাথে এটি আমার কাছে একটি মতামত ভিত্তিক প্রশ্ন বলে মনে হয়েছে (যেমনটি আপনি এটি জিজ্ঞাসা করেছিলেন))
এটিকে মতামত-ভিত্তিক হওয়া থেকে দূরে সরিয়ে নেওয়া যেতে পারে, যদি আপনি পরিস্থিতি সম্পর্কে আরও বিশদ হন এবং আপনি যে লক্ষ্যগুলি প্রাথমিক হিসাবে ধরেছিলেন তা সাবধানতার সাথে বর্ণনা করে। আপনি আপনার পরিমাপের সরঞ্জামগুলি যত ভাল নির্ধারণ করবেন, উত্তরগুলি তত বেশি উদ্দেশ্য হতে পারে।
বিস্তৃতভাবে বলতে গেলে, যে কোনও কোডিংয়ের জন্য আপনি নিম্নলিখিতটি করতে চান । (নীচের জন্য, আমি ধরে নেব যে আমরা লক্ষ্যগুলি অর্জন করে এমন সমস্ত পদ্ধতির সাথে তুলনা করছি vious স্পষ্টতই, যে কোনও কোড প্রয়োজনীয় কাজ সম্পাদন করতে ব্যর্থ হয় এমন কোডের চেয়ে খারাপ এটি কোড লিখিতভাবে নির্বিশেষে সফল হয়।)
- আপনার পদ্ধতির বিষয়ে সামঞ্জস্য বজায় রাখুন, যাতে আপনার কোড পড়ার অন্য কোনওটি কীভাবে আপনি আপনার কোডিং প্রক্রিয়াটির কাছে যান তার বোঝার বিকাশ করতে পারে। অসঙ্গত হওয়া সম্ভবত সবচেয়ে খারাপ অপরাধ। এটি কেবল অন্যের পক্ষেই অসুবিধা সৃষ্টি করে না, বরং কয়েক বছর পরে কোডটিতে ফিরে আসা আপনার পক্ষে কঠিন করে তোলে।
- সম্ভাব্য ডিগ্রীতে, চেষ্টা করে জিনিসগুলি সাজিয়ে রাখুন যাতে অর্ডার বিবেচনা না করেই বিভিন্ন কার্যকরী বিভাগের সূচনা করা যায়। যেখানে অর্ডিংয়ের প্রয়োজন হয়, যদি এটি দুটি অত্যন্ত সম্পর্কিত সাব-ফাংশনগুলির কাছাকাছি সংযোগের কারণে হয় , তবে উভয়ের জন্য একটি একক সূচনা বিবেচনা করুন যাতে কোনও ক্ষতি না করেই এটি পুনরায় সাজানো যায়। যদি এটি সম্ভব না হয় তবে প্রারম্ভিক ক্রমটির প্রয়োজনীয় আদেশটি নথি করুন।
- সম্ভব হলে ঠিক এক জায়গায় জ্ঞানকে গুটিয়ে নিন । কনস্ট্যান্টগুলি কোডের সমস্ত জায়গায় নকল করা উচিত নয়। কিছু পরিবর্তনশীলগুলির জন্য সমাধান করা সমীকরণগুলি কেবলমাত্র একটি জায়গায় উপস্থিত থাকতে হবে। ইত্যাদি। যদি আপনি নিজেকে বিভিন্ন স্থানে কিছু প্রয়োজনীয় আচরণ সম্পাদন করে এমন কিছু লাইন সেট করে অনুলিপি এবং আটকানো দেখতে পান তবে সেই জ্ঞানকে এক জায়গায় ক্যাপচার করার জন্য এবং যেখানে প্রয়োজন সেখানে এটি ব্যবহার করার উপায় বিবেচনা করুন। উদাহরণস্বরূপ, আপনার যদি গাছের কাঠামো থাকে যা অবশ্যই একটি নির্দিষ্ট উপায়ে চলতে হবে, নাআপনার গাছের নোডগুলির মধ্য দিয়ে লুপ করা দরকার যেখানে এবং প্রতিটি জায়গায় ট্রি-ওয়াকিং কোডটি প্রতিলিপি করুন। পরিবর্তে, গাছের হাঁটার পদ্ধতিটি এক জায়গায় ক্যাপচার করুন এবং এটি ব্যবহার করুন। এইভাবে, যদি গাছের পরিবর্তন হয় এবং হাঁটার পদ্ধতি পরিবর্তিত হয় তবে আপনার উদ্বেগের জন্য কেবলমাত্র একটি জায়গা রয়েছে এবং বাকী সমস্ত কোড "ঠিক ঠিক কাজ করে।"
- যদি আপনি আপনার রুটিনগুলি সমস্ত বিশাল কাগজের ফ্ল্যাট শিটের উপরে ছড়িয়ে দেন, তীরগুলি অন্য রুটিন দ্বারা ডেকে আনা হয় সেগুলি সংযুক্ত করে, আপনি কোনও অ্যাপ্লিকেশনটিতে দেখবেন সেখানে প্রচুর এবং প্রচুর তীরযুক্ত রুটিনের "ক্লাস্টার" থাকবে any নিজেদের মধ্যে কিন্তু গোষ্ঠীর বাইরে কেবল কয়েকটি তীর। সুতরাং ঘনিষ্ঠভাবে মিলিত রুটিনগুলির ঘনিষ্ঠভাবে মিলিত রুটিনগুলির এবং অন্যান্য গ্রুপগুলির মধ্যে আলগাভাবে সংযুক্ত সংযোগগুলির প্রাকৃতিক সীমানা থাকবে । আপনার কোডটিকে মডিউলগুলিতে সংগঠিত করতে এই সত্যটি ব্যবহার করুন। এটি আপনার কোডের আপাত জটিলতা যথেষ্ট পরিমাণে সীমাবদ্ধ করবে।
উপরের সমস্ত কোডিং সম্পর্কে সাধারণভাবে সত্য। আমি প্যারামিটারগুলির ব্যবহার, স্থানীয় বা স্ট্যাটিক গ্লোবাল ভেরিয়েবল ইত্যাদির বিষয়ে আলোচনা করিনি কারণ এর কারণ হ'ল এম্বেড করা প্রোগ্রামিংয়ের জন্য অ্যাপ্লিকেশন স্পেসটি প্রায়শই চরম এবং অত্যন্ত তাৎপর্যপূর্ণ নতুন প্রতিবন্ধকতা রাখে এবং প্রতিটি এম্বেডযুক্ত অ্যাপ্লিকেশন নিয়ে আলোচনা না করে এগুলি সব নিয়ে আলোচনা করা অসম্ভব। এবং যে এখানে যাই হোক না কেন।
এই সীমাবদ্ধতাগুলি এর যে কোনও (এবং আরও) হতে পারে:
- গুরুতর ব্যয়ের সীমাবদ্ধতার জন্য মিনিস্কুল র্যাম সহ অত্যন্ত আদিম এমসিইউ প্রয়োজন এবং প্রায় আই / ও পিন-কাউন্ট নেই। এগুলির জন্য, সম্পূর্ণ নতুন নিয়ম প্রযোজ্য। উদাহরণস্বরূপ, আপনাকে কোড কোড লিখতে হতে পারে কারণ সেখানে কোডের বেশি জায়গা নেই code আপনাকে কেবলমাত্র স্থিতিশীল ভেরিয়েবলগুলি ব্যবহার করতে হতে পারে কারণ স্থানীয় ভেরিয়েবলগুলির ব্যবহার খুব ব্যয়বহুল এবং সময় সাপেক্ষ। আপনাকে সাব্রুটাইনগুলির অত্যধিক ব্যবহার এড়াতে হবে কারণ (উদাহরণস্বরূপ, কিছু মাইক্রোচিপ পিআইসি অংশ) কেবলমাত্র 4 টি হার্ডওয়্যার রেজিস্টার রয়েছে যাতে সাব্রোটিনের ফেরতের ঠিকানাগুলি সংরক্ষণ করতে হয়। সুতরাং আপনার কোডটি নাটকীয়ভাবে "সমতল" করতে হতে পারে। প্রভৃতি
- গুরুতর সীমাবদ্ধতার জন্য সতর্কতার সাথে কোড তৈরির প্রয়োজন এমসিইউর বেশিরভাগটি শুরু এবং বন্ধ করে দেওয়া এবং পূর্ণ গতিতে চলার সময় কোডের প্রয়োগের সময় গুরুতর সীমাবদ্ধতা স্থাপন করা। আবার এর জন্য কিছু সময় সমাবেশের কোডিংয়ের প্রয়োজন হতে পারে require
- গুরুতর সময় প্রয়োজন। উদাহরণস্বরূপ, এমন সময় আছে যেখানে আমি নিশ্চিত করেছিলাম যে ওপেন-ড্রেন 0 সংক্রমণকে ঠিক একই সংখ্যার চক্রটি 1 সংক্রমণ হিসাবে গ্রহণ করতে হয়েছিল। এবং এই একই লাইনের নমুনাটিও সম্পাদন করতে হয়েছিল এই সময়ের সাথে সঠিক আপেক্ষিক পর্যায়ে। এর অর্থ হ'ল সি এখানে ব্যবহার করা যাবে না। এই গ্যারান্টিটি তৈরি করার একমাত্র সম্ভাব্য উপায় হ'ল সাবধানে অ্যাসেম্বলি কোডটি তৈরি করা। (এবং তারপরেও সবসময় সমস্ত ALU ডিজাইনে থাকে না))
ইত্যাদি। (লাইফ-ক্রিটিকাল ইনস্ট্রুমেন্টাল জন্য ওয়্যারিং কোডের নিজস্ব একটি পুরো বিশ্ব রয়েছে))
এখানে আপশটটি হ'ল এম্বেড করা কোডিং প্রায়শই কিছু অবাধ-মুক্ত নয়, যেখানে আপনি কোনও ওয়ার্কস্টেশনে আপনার পছন্দ মতো কোড করতে পারেন। বিভিন্ন সময়ে খুব কঠিন সীমাবদ্ধতার জন্য প্রায়শই তীব্র, প্রতিযোগিতামূলক কারণ রয়েছে। এবং এগুলি আরও প্রচলিত এবং স্টক উত্তরের বিরুদ্ধে দৃ strongly়তার সাথে তর্ক করতে পারে ।
পঠনযোগ্যতা সম্পর্কে, আমি দেখতে পেলাম যে কোডটি যদি ধারাবাহিকভাবে লেখা হয় তবে আমি এটি পড়তে শিখতে পারি। এবং যেখানে কোড অবলম্বন করার ইচ্ছাকৃত প্রচেষ্টা নেই। সত্যিকারের অনেক বেশি প্রয়োজন নেই।
পঠনযোগ্য কোডটি বেশ দক্ষ হতে পারে এবং এটি ইতিমধ্যে উল্লিখিত উপরের সমস্ত প্রয়োজনীয়তা পূরণ করতে পারে । মূল কথাটি হ'ল আপনি যে কোডটি লিখেছেন তার প্রতিটি লাইন বিধানসভা বা মেশিন স্তরে কী উত্পন্ন করে তা আপনি পুরোপুরি বুঝতে পেরেছেন। সি ++ এখানে প্রোগ্রামারের উপর মারাত্মক বোঝা ফেলেছে কারণ অনেকগুলি পরিস্থিতি রয়েছে যেখানে সি ++ কোডের অভিন্ন স্নিপেটগুলি আসলে মেশিন কোডের বিভিন্ন স্নিপেটগুলি উত্পন্ন করে যার বিস্তৃত পারফরম্যান্স রয়েছে। তবে সি, সাধারণত বেশিরভাগ ক্ষেত্রেই একটি ভাষা "আপনি যা দেখেন তা হ'ল" is সুতরাং এটি যে ক্ষেত্রে নিরাপদ।
জেসনস প্রতি সম্পাদনা করুন:
আমি ১৯8৮ সাল থেকে সি এবং সি ++ প্রায় 1987 সাল থেকে ব্যবহার করছি এবং মেইনফ্রেম, মিনি কম্পিউটার এবং এম্বেড এম্বেডেড উভয় ক্ষেত্রেই উভয় ব্যবহার করার অভিজ্ঞতা পেয়েছি।
জেসন একটি সংশোধক হিসাবে 'ইনলাইন' ব্যবহার সম্পর্কে একটি মন্তব্য নিয়ে আসে। (আমার দৃষ্টিতে এটি তুলনামূলকভাবে "নতুন" সামর্থ্য কারণ এটি আমার জীবনের অর্ধেক বা তার বেশি সি এবং সি ++ ব্যবহার করে কেবল উপস্থিত ছিল না)) ইনলাইন ফাংশনগুলির ব্যবহার আসলে এই জাতীয় কলগুলি করতে পারে (এমনকি একটি লাইনের জন্যও) কোড) বেশ ব্যবহারিক। সংকলক প্রয়োগ করতে পারে এমন টাইপিংয়ের কারণে ম্যাক্রো ব্যবহার করার চেয়ে এটি আরও বেশি ভাল, যেখানে সম্ভব।
তবে সীমাবদ্ধতাও রয়েছে। প্রথমটি হ'ল আপনি "ইঙ্গিতটি নিতে" সংকলকের উপর নির্ভর করতে পারবেন না। এটা হতে পারে বা নাও হতে পারে. এবং ইঙ্গিতটি না নেওয়ার ভাল কারণ রয়েছে। (একটি সুস্পষ্ট উদাহরণের জন্য, যদি ফাংশনের ঠিকানা নেওয়া হয় তবে এটির জন্য ফাংশনটি ইনস্ট্যান্টেশন এবং কলটি করার জন্য ঠিকানা ব্যবহারের প্রয়োজন ... একটি কল প্রয়োজন then তখন কোডটি ইনলাইন করা যায় না)) রয়েছে অন্যান্য কারণ হিসাবে। সংকলকগুলির বিভিন্ন ধরণের মানদণ্ড থাকতে পারে যার মাধ্যমে তারা কীভাবে ইঙ্গিতটি পরিচালনা করতে পারে তা বিচার করে। এবং প্রোগ্রামার হিসাবে, এর অর্থ আপনার অবশ্যই হবেসংকলকটির সেই দিকটি সম্পর্কে জানতে কিছুটা সময় ব্যয় করুন অথবা অন্যথায় আপনি ত্রুটিযুক্ত ধারণাগুলির ভিত্তিতে সিদ্ধান্ত নিতে পারেন। সুতরাং এটি কোডের লেখক এবং যে কোনও পাঠক এবং কোডটি অন্য কোনও সংকলকটিতে পোর্ট করার পরিকল্পনা করছে এমন উভয়কেই বোঝা যুক্ত করে।
এছাড়াও, সি এবং সি ++ সংকলক পৃথক সংকলন সমর্থন করে। এর অর্থ হ'ল তারা প্রকল্পের জন্য অন্য কোনও সম্পর্কিত কোড সংকলন না করে সি বা সি ++ কোডের এক টুকরা সংকলন করতে পারবেন। কোডটি ইনলাইন করার জন্য, সংকলকটি অন্যথায় এটি করতে পারে তা ধরে নিয়েই এটির কেবলমাত্র "সুযোগ" হিসাবে ঘোষণা থাকতে হবে না তবে এটির সংজ্ঞাও থাকতে হবে। সাধারণত, প্রোগ্রামাররা যদি তারা 'ইনলাইন' ব্যবহার করে থাকে তবে বিষয়টি নিশ্চিত হওয়ার জন্য কাজ করবে। তবে ভুলগুলি ক্রাইপ করা সহজ।
সাধারণভাবে, আমি যেখানে আমি এটি উপযুক্ত বলে মনে করি সেখানে ইনলাইন ব্যবহার করি, তখন আমি ধরেই নিয়েছি যে আমি এটির উপর নির্ভর করতে পারি না। যদি পারফরম্যান্স একটি উল্লেখযোগ্য প্রয়োজনীয়তা হয় এবং আমি মনে করি যে ওপি ইতিমধ্যে স্পষ্টভাবে লিখে ফেলেছে যে তারা যখন আরও "কার্যকরী" পথে যায় তখন একটি উল্লেখযোগ্য পারফরম্যান্স হিট হয়েছিল, তবে আমি অবশ্যই কোডিং অনুশীলন হিসাবে ইনলাইনে নির্ভর করা এড়াতে পছন্দ করব এবং পরিবর্তে কিছুটা ভিন্ন, তবে লিখন কোডের সম্পূর্ণ সুসংগত প্যাটার্ন অনুসরণ করবে।
পৃথক সংকলন পদক্ষেপের জন্য 'ইনলাইন' এবং সংজ্ঞাগুলি "সুযোগ" সম্পর্কে একটি চূড়ান্ত নোট। লিঙ্কিং পর্যায়ে কাজটি সম্পাদন করা সম্ভব (সর্বদা নির্ভরযোগ্য নয়)। কোনও লিঙ্কারকে 'ইনলাইন' অনুরোধগুলিতে কাজ করার অনুমতি দেওয়ার জন্য যদি কেবল কোনও সি / সি ++ সংকলক অবজেক্ট ফাইলগুলিতে পর্যাপ্ত বিবরণ দেয় তবে এটি ঘটতে পারে। আমি ব্যক্তিগতভাবে কোনও লিঙ্কার সিস্টেম (মাইক্রোসফ্টের বাইরে) এর অভিজ্ঞতা লাভ করি নি যা এই ক্ষমতাটিকে সমর্থন করে। তবে তা ঘটতে পারে। আবার, এটির উপর নির্ভর করা উচিত কিনা তা নির্ভর করবে পরিস্থিতির উপর। তবে আমি সাধারণত ধরে নিই যে এটি লিঙ্কারের উপরে চালিত হয়নি, যদি না আমি ভাল প্রমাণের ভিত্তিতে অন্যথায় জানি না। এবং যদি আমি এটির উপর নির্ভর করি তবে এটি একটি বিশিষ্ট জায়গায় নথিভুক্ত করা হবে।
সি ++
আগ্রহী ব্যক্তিদের জন্য, এম্বেড থাকা অ্যাপ্লিকেশনগুলির কোডিংয়ের সময় আমি কেন প্রস্তুত থাকব তার জন্য এখন কেন আমি সি ++ সম্পর্কে মোটামুটি সতর্ক থাকি তার একটি উদাহরণ এখানে। আমি এমন কিছু পদ টস করব যা আমার মনে হয় যে সমস্ত এম্বেড থাকা সি ++ প্রোগ্রামারকে শীতল জানা দরকার :
- আংশিক টেম্পলেট বিশেষীকরণ
- vtables
- ভার্চুয়াল বেস অবজেক্ট
- অ্যাক্টিভেশন ফ্রেম
- অ্যাক্টিভেশন ফ্রেম উন্মুক্ত
- কনস্ট্রাক্টরগুলিতে স্মার্ট পয়েন্টার ব্যবহার এবং কেন
- রিটার্ন মান অপ্টিমাইজেশন
এটি কেবল একটি সংক্ষিপ্ত তালিকা। আপনি যদি এই শর্তাদি সম্পর্কে ইতিমধ্যে সবকিছু জানেন না এবং কেন আমি সেগুলি তালিকাভুক্ত করেছি (এবং আরও অনেকগুলি আমি এখানে তালিকাবদ্ধ করিনি) তবে আমি এম্বেডযুক্ত কাজের জন্য সি ++ ব্যবহারের বিরুদ্ধে পরামর্শ দেব, যদি না এটি প্রকল্পের বিকল্প না হয় unless ।
আসুন কেবল একটি স্বাদ পেতে সি ++ ব্যতিক্রম শব্দার্থবিজ্ঞানগুলিতে এক ঝলক দেখি।
একজনবি
একজন
.
.
foo ();
String s;
foo ();
.
.
একজন
বি
সি ++ সংকলক foo () এ প্রথম কলটি দেখেছে এবং foo () ব্যতিক্রম ছুঁড়ে ফেললে কেবলমাত্র একটি সাধারণ অ্যাক্টিভেশন ফ্রেমটিকে আনইন্ডাইন্ড হতে দেয়। অন্য কথায়, সি ++ সংকলক জানেন যে ব্যতিক্রম হ্যান্ডলিংয়ের সাথে জড়িত ফ্রেম আনওয়াইন্ড প্রক্রিয়া সমর্থন করার জন্য এই মুহুর্তে কোনও অতিরিক্ত কোডের প্রয়োজন নেই।
তবে একবার স্ট্রিং গুলি তৈরি হয়ে গেলে, সি ++ সংকলক জানে যে কোনও ফ্রেম খুলে দেওয়ার অনুমতি দেওয়ার আগে এটি সঠিকভাবে ধ্বংস করতে হবে, যদি পরে কোনও ব্যতিক্রম ঘটে। সুতরাং foo () এর দ্বিতীয় কলটি প্রথম থেকে শব্দার্থগতভাবে পৃথক। যদি foo () এর 2 র্থ কলটি একটি ব্যতিক্রম ছোঁড়ে (যা এটি করতে পারে বা না পারে), সাধারণ ফ্রেমটি উন্মুক্ত না হওয়ার আগে সংকলকটিতে অবশ্যই স্ট্রিংয়ের ধ্বংসটি পরিচালনা করার জন্য নকশাকৃত কোড স্থাপন করা উচিত। এটি foo () এ প্রথম কল করার জন্য প্রয়োজনীয় কোডের চেয়ে আলাদা ।
( এই সমস্যাটি সীমাবদ্ধ করতে সহায়তার জন্য সি ++ এ অতিরিক্ত সজ্জা যুক্ত করা সম্ভব But তবে বাস্তব কথাটি হ'ল সি ++ ব্যবহারকারী প্রোগ্রামারদের অবশ্যই তাদের প্রতিটি কোডের কোডের লাইন সম্পর্কে আরও সচেতন হতে হবে))
সি এর ম্যালোক থেকে ভিন্ন, সি ++ এর নতুন ব্যবহার যখন এটি কাঁচা মেমরি বরাদ্দ করতে পারে না তখন সিগন্যাল করতে ব্যতিক্রম ব্যবহার করে। সুতরাং 'গতিশীল_কাস্ট' করবে। (স্ট্রস্ট্রুপের তৃতীয় সংস্করণ, সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজ, সি ++ এর মান ব্যতিক্রমগুলির জন্য পৃষ্ঠা 384 এবং 385 দেখুন See) সংকলকরা এই আচরণটি অক্ষম করার অনুমতি দিতে পারে। তবে সাধারণভাবে উত্পন্ন কোডটিতে সঠিকভাবে গঠিত ব্যতিক্রম হ্যান্ডলিং প্রলোগগুলি এবং এপিওলোগগুলির কারণে আপনি কিছুটা ওভারহেড ব্যয় করতে পারেন, এমনকি যখন ব্যতিক্রমগুলি প্রকৃতপক্ষে সঞ্চালিত হয় না এবং এমনকি যখন ফাংশনটি সংকলন করা হয় তখন বাস্তবে কোনও ব্যতিক্রম হ্যান্ডলিং ব্লক না থাকে। (স্ট্রাস্ট্রাপ প্রকাশ্যে এ নিয়ে শোক প্রকাশ করেছে।)
আংশিক টেম্পলেট বিশেষীকরণ ছাড়া (সমস্ত সি ++ সংকলক এটি সমর্থন করে না), টেমপ্লেটগুলির ব্যবহার এম্বেডড প্রোগ্রামিংয়ের জন্য দুর্যোগের বানান করতে পারে। এটি ছাড়াই কোড ব্লুম একটি মারাত্মক ঝুঁকি যা একটি ফ্ল্যাশ-এ একটি ক্ষুদ্র-স্মৃতি এমবেডেড প্রকল্পকে হত্যা করতে পারে।
যখন কোনও সি ++ ফাংশন কোনও অবজেক্ট ফেরত দেয় একটি নামবিহীন সংকলক অস্থায়ী তৈরি এবং ধ্বংস হয়। কিছু সি ++ সংকলক কার্যকর কোড সরবরাহ করতে পারে যদি কোনও অবজেক্ট কনস্ট্রাক্টর স্থানীয় অবজেক্টের পরিবর্তে রিটার্ন স্টেটমেন্টে ব্যবহার করা হয় তবে একটি বস্তুর দ্বারা নির্মাণ ও ধ্বংসের প্রয়োজনীয়তা হ্রাস করে। তবে প্রতিটি সংকলক এটি করে না এবং অনেক সি ++ প্রোগ্রামার এমনকি এই "রিটার্ন মান অপ্টিমাইজেশন" সম্পর্কে অবগত নয়।
একটি একক প্যারামিটার ধরণের সাথে কোনও অবজেক্ট কনস্ট্রাক্টর সরবরাহ করা সি ++ কম্পাইলারের সাথে প্রোগ্রামারের কাছে সম্পূর্ণ অপ্রত্যাশিত উপায়ে দুটি ধরণের রূপান্তর পথ সন্ধান করতে পারে। এই ধরণের "স্মার্ট" আচরণ সি এর অংশ নয়
একটি বেস ধরণ নির্দিষ্ট করে একটি ক্যাচ ক্লজটি একটি ছোঁড়া der ব্যতিক্রম দুর্দশার একটি অসাধারণ উত্স নয় (যখন আপনি মনে করেন আপনি নিজের এম্বেডড কোডটিতে ব্যতিক্রমও বহন করতে পারেন))
সি ++ সংকলকগুলি অনিচ্ছাকৃত ফলাফল সহ স্বয়ংক্রিয়ভাবে আপনার জন্য কন্সট্রাক্টর, ডেস্ট্রাক্টর, কপি কনস্ট্রাক্টর এবং এসাইনমেন্ট অপারেটর তৈরি করতে পারে। এটির বিশদ সহ সুবিধা পেতে সময় লাগে।
বেস অবজেক্টগুলির অ্যারে গ্রহণ করে কোনও ফাংশনে ডারেক্টেড অবজেক্টের অ্যারেগুলি পাস করা, খুব কমই সংকলক সতর্কতা উত্পন্ন করে তবে প্রায়শই সবসময় ভুল আচরণের ফল পাওয়া যায়।
যেহেতু সি ++ অবজেক্ট কনস্ট্রাক্টারে একটি ব্যতিক্রম ঘটে তখন আংশিকভাবে নির্মিত বস্তুর ধ্বংসকারীকে ডাকে না, কনস্ট্রাক্টরের ব্যতিক্রমগুলি পরিচালনা করা সাধারণত "স্মার্ট পয়েন্টার" নির্দেশ দেয় যাতে গ্যারান্টির জন্য কনস্ট্রাক্টরের নির্মিত টুকরাগুলি যথাযথভাবে ধ্বংস হয়ে যায় যদি সেখানে কোনও ব্যতিক্রম ঘটে থাকে। । (স্ট্র্যাস্ট্রপ, পৃষ্ঠা ৩7 36 এবং ৩8৮ দেখুন।) সি ++ তে ভাল ক্লাস লেখার ক্ষেত্রে এটি একটি সাধারণ সমস্যা, তবে অবশ্যই সিটিতে এড়ানো হয়েছে কারণ সিতে নির্মাণ ও ধ্বংসের শব্দার্থক শব্দটি নেই, নির্মাণ পরিচালনা করার জন্য যথাযথ কোড লেখা কোনও অবজেক্টের মধ্যে সাবওবজেক্টগুলির অর্থ কোড লিখনের কোড যা অবশ্যই সি ++ এ এই অনন্য অর্থসূচক সমস্যার সাথে লড়াই করতে হবে; অন্য কথায় "চারপাশে লেখার জন্য" সি ++ শব্দার্থিক আচরণ।
সি ++ অবজেক্ট পরামিতিগুলিতে পাস করা বস্তুগুলি অনুলিপি করতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত টুকরাগুলিতে, "আরএ (এক্স)" কল করুন; সি ++ সংকলক প্যারামিটার পি এর জন্য কনস্ট্রাক্টরকে অনুরোধ করতে পারে, তারপরে কপি কন্সট্রাক্টরকে অবজেক্ট এক্সকে প্যারামিটার পিতে স্থানান্তর করতে কল করতে পারে, তারপরে ফাংশন আরএর রিটার্ন অবজেক্টের (একটি নামবিহীন অস্থায়ী) জন্য অন্য নির্মাণকারী অবশ্যই কোনটি প্যারামিটার থেকে অনুলিপি পি। সবচেয়ে খারাপটি, ক্লাস এ এর নিজস্ব অবজেক্টগুলি রয়েছে যার নির্মাণ প্রয়োজন, এটি বিপর্যয়করভাবে দূরবীণ করতে পারে। (এসি প্রোগ্রামার এই আবর্জনাটির বেশিরভাগ অংশ এড়াতে পারবেন, হাত অনুকূলকরণের কারণে সি প্রোগ্রামারগুলির হাতে এমন সিন্ট্যাক্স নেই এবং একবারে সমস্ত বিবরণ প্রকাশ করতে হবে))
class A {...};
A rA (A p) { return p; }
// .....
{ A x; rA(x); }
অবশেষে সি প্রোগ্রামারদের জন্য একটি সংক্ষিপ্ত নোট। লংজ্যাম্প () এর সি ++ তে পোর্টেবল আচরণ নেই। (কিছু সি প্রোগ্রামার এটিকে এক ধরণের "ব্যতিক্রম" প্রক্রিয়া হিসাবে ব্যবহার করে)) কিছু সি ++ সংকলক আসলে লংজ্যাম্পটি নেওয়ার সময় জিনিসগুলি পরিষ্কার করার জন্য সেট আপ করার চেষ্টা করবে, তবে সেই আচরণটি সি ++ এ বহনযোগ্য নয়। যদি সংকলকটি নির্মাণকৃত অবজেক্টগুলি পরিষ্কার করে দেয় তবে এটি বহনযোগ্য নয়। সংকলক যদি সেগুলি পরিষ্কার না করে তবে লংজ্যাম্পের ফলে কোডটি নির্মাণকৃত সামগ্রীর সুযোগ ছেড়ে দিলে এবং আচরণটি অবৈধ হলে অবজেক্টগুলি ধ্বংস হয় না। (যদি foo () এ লংজ্যাম্পের ব্যবহার কোনও সুযোগ না ফেলে থাকে তবে আচরণটি ভাল হতে পারে)) সি এম্বেড হওয়া প্রোগ্রামাররা এটি প্রায়শই ব্যবহার করেন না তবে তাদের ব্যবহার করার আগে তাদের এই বিষয়গুলি সম্পর্কে নিজেদের সচেতন করা উচিত।