সি এর বেশি সি ++ এবং সি ++ এর বেশি কখন ব্যবহার করবেন?


164

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

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

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

সুতরাং কেউ যদি পরিস্থিতি পরিষ্কার করতে পারে তবে এটি প্রশংসা হবে! ধন্যবাদ


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

30
@ কাইলবেন: অনেক সি ++ ছেলেরা আপনাকে বলবে: (1) পারফরম্যান্স সি তে নেমে যাওয়ার কারণ নয় (সম্ভবত এড়ানো virtualএবং আরও কয়েকটি বৈশিষ্ট্য যা অপ্টিমাইজেশন প্রতিরোধ করে, তবে উদাহরণস্বরূপ নন- virtualক্লাসগুলি সহজাতভাবে অদক্ষ নয় এবং টেমপ্লেটগুলি একটি শক্তিশালী বিমূর্তকরণ সরঞ্জাম যা প্রকৃতপক্ষে আরও দক্ষতার দিকে পরিচালিত করতে পারে - যেমন qsortবনাম std::sort)। (২) নির্ভুলতার উচ্চ গুরুত্ব সি এর উপর সি ++ (টাইপস্যাফটি, constনেস, privateআরআইআইআই রিসোর্স ম্যানেজমেন্টকে ম্যানেজমেন্টেবল করে তোলা ইত্যাদি) ব্যবহার করার কারণ বা সেই বিষয়টির জন্য, অ্যাডা বা প্রথমে কিছু ব্যবহার করুন।

11
@ পাব্বি 8 আমি এর সাথে একমত নই যদি আমি একটি .c ফাইলে কাজ করছি এবং আমি লোকেরা এটি করতে দেখি তবে তারা কী করছে তা না জেনে আমি তাদের মানসিকভাবে ফ্ল্যাগ করার ঝোঁক করি। উদাহরণস্বরূপ, void*সি কোডে অন্য পয়েন্টার টাইপ থেকে কাস্ট করার দরকার নেই , এটি খুব বিভ্রান্তিকর এবং সাধারণ মানুষ যারা সি জানেন না তাদের আদর্শ
Asveikau

4
@ কাইলবেন: (আপনি নিজের মন্তব্যের জবাবগুলিতে অন্যকে সঠিকভাবে সম্বোধন করতে শিখতে চাইতে পারেন, তাই তাদের আসলে দেখার সুযোগ রয়েছে )) "সংকলক সিটিকে কীভাবে রূপান্তরিত করে তার সাথে খুব পরিচিত একজন প্রোগ্রামার সি ++ এর জন্য কাজ করবে as ভাল। তবে এটি কেবল অপ্রাসঙ্গিক: আপনি যদি ছাঁটাই করতে চান তবে একটি সংকলককে অন্য কোনও ভাষা থেকে তৈরি করার পরিবর্তে কেবল asm লিখুন। এটি যেভাবে এটি করে তা প্রতিটি সংকলক আপডেটের সাথে পরিবর্তিত হতে পারে।
এসবিআই

9
আমার নম্র মতামত ... আপনি যখন চান তখন সি ব্যবহার করেন: আমার জন্য সি ++ এর চেয়ে সি অনেক বেশি সহজ এবং সহজেই ব্যবহার করা যায় ... সি ++ একটি "সি ক্লাস সহ" এর মতো দেখতে হতে পারে তবে এটি আর নেই, এখন এটি ভার্চুয়াল কনস্ট্রাক্টর এবং টেম্পলেটগুলির মতো জিনিসগুলির সাথে একটি খুব জটিল ভাষা।
ডাইসোকো

উত্তর:


184

আপনি সি বাছাই যখন

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

অন্যান্য সমস্ত ক্ষেত্রে আপনার সি ++ বাছাই করা উচিত।


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

12
@ এসএফ: সি লিংগুয়া ফ্রাঙ্কা? এটা নতুন। বা বরং, খুব পুরানো। আপনি যদি কেবলমাত্র সেই লোকদের সাথে কথোপকথন করেন যারা গত 20 বছর ধরে নতুন ভাষা শেখেন না, তবে আমি বলব যে সি জ্ঞান আর সাধারণ নয়।
ডেডএমজি

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

18
@ ম্যাক্স: আমি সম্পূর্ণরূপে একমত নই। সি একটি অকেজো ভাষা, যদি না কিছু অদম্য ব্যবহারিক বাধা সি ++ ব্যবহার বন্ধ করে দেয়।
ডেড এমজি

17
@ বাটনস: আপনিই দাবি করেছেন ("সি ++ এর আরও বেশি স্মৃতি দরকার"), তাই আপনার সমর্থন করা উচিত যারা এটি সমর্থন করে। এবং, না, আমি দাবি করছি না যে সি ++ এর কম স্মৃতি রয়েছে needs আমি যা বলছি তা হ'ল বৈশিষ্ট্যগুলি ব্যয় করে, কম্পাইলার আপনার (ভার্চুয়াল ফাংশন) এগুলি প্রয়োগ করে বা আপনি নিজে সেগুলি করেন (ফাংশন পয়েন্টারগুলির বিন্যাস) matter
sbi

88

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

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

সি ব্যবহারের আর একটি সময় / কারণ হ'ল ফাংশনগুলির একটি সেট সরবরাহ করা যা আপনি অন্য কোনও ভাষা থেকে আবশ্যক। আপনি এই ফাংশনগুলিকে ফাংশন হিসাবে সংজ্ঞায়িত করে সি ++ এ লিখতে পারেনextern "C" , তবে এটি করার মাধ্যমে সেই ফাংশনগুলি বিশ্বের কাছে একটি মূলত সি-লাইফ "ফেস" উপস্থাপনের মধ্যে সীমাবদ্ধ করে - শ্রেণি, ওভারলোডেড ফাংশন, টেম্পলেট এবং সদস্য ফাংশন, ইত্যাদি, প্রয়োজন নেই need প্রযোজ্য। এটি অগত্যা সি এর বিকাশ সীমাবদ্ধ করে না - যতক্ষণ না বাহ্যিক ইন্টারফেস সি এর মতো দেখা যায় ততক্ষণ অভ্যন্তরীণভাবে কোনও এবং সমস্ত ধরণের সি ++ বৈশিষ্ট্য ব্যবহার করা একেবারে যুক্তিসঙ্গত

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

টেমপ্লেটগুলি "ভাষার ধরণের সিস্টেমে কোনও সমস্যা সমাধান করে না", তারা কেবলমাত্র টেমপ্লেট ছাড়াই সি এবং / অথবা সি ++ থেকে সম্পূর্ণ অনুপস্থিত বেশ কয়েকটি মৌলিক ক্ষমতা যুক্ত করে। মূল উদ্দেশ্যগুলির মধ্যে একটি হ'ল টাইপ-নিরাপদ পাত্রে সরবরাহ করা ছিল, কিন্তু বাস্তবে তারা এর থেকে অনেক বেশি এগিয়ে যায় - মূলত সি এর কোনও কিছুই সরবরাহ করে না।

অটোমেটেড সরঞ্জামগুলি বেশিরভাগ ক্ষেত্রে একটি লাল হেরিংও - যদিও এটি সত্য যে সি পার্সার লেখার চেয়ে সি ++ পার্সার লেখার চেয়ে কম কাজ হয়, বাস্তবতাটি এটি শেষ পর্যন্ত কার্যত কোনও পার্থক্য করে না। খুব কম লোকই দুজনের একটির জন্য ব্যবহারযোগ্য পার্সার লিখতে ইচ্ছুক বা সক্ষম। এর মতো, যুক্তিসঙ্গত প্রারম্ভিক বিন্দুটি কোনওভাবেই ঝনঝন।

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


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

5
+1 এবং রেকর্ডের জন্য, আমি নিয়মিত 4KiB রম সহ 8-বিট প্রসেসরের জন্য সি ++ কোড লিখি।
অবাকর

2
সামগ্রিক দুর্দান্ত উত্তরের জন্য +1। আমি যা বুঝতে পারি না (এটি আমার কোনও অভিজ্ঞতা নেই) কেন এটি (আমি অনুমান করি যে আমরা এমবেডেড কথা বলছি?) একটি সি সংকলক একই বৈশিষ্ট্য সেট ব্যবহারের ফলে সি ++ সংকলকটির চেয়ে ছোট এক্সিকিউটেবল কোড তৈরি করতে হবে ? আপনি কিছু রেফারেন্স দিতে পারে?
মার্টিন বা

2
@ মার্টিন: মূল কথাটি হ'ল সি ++ এ ব্যতিক্রম হ্যান্ডলিং অন্তর্ভুক্ত থাকে যা (কমপক্ষে সাধারণত) সম্পাদনযোগ্য আকারে কিছুটা ন্যূনতম যোগ করে। বেশিরভাগ সংকলক আপনাকে ব্যতিক্রম হ্যান্ডলিং অক্ষম করতে দেয় তবে আপনি যখন ফলাফলটি করেন তখন আর সি ++ হয় না। আমি সন্দেহ করি যে সরল সত্য থেকেও কিছুটা আছে যে অনেকগুলি সি ++ সংকলক বিক্রেতারা কেবলমাত্র সবচেয়ে ছোট সম্ভাব্য আউটপুট কোড তৈরিতে যথেষ্ট কঠোর পরিশ্রম করেন না।
জেরি কফিন 15

3
"আমরা দেখতে পেয়েছি যে সি এর পরিবর্তে সি ++ ব্যবহার করা উন্নত সফ্টওয়্যার মানের এবং রক্ষণাবেক্ষণের প্রচেষ্টা হ্রাস পেয়েছে ..." এটি মনে করার উপসংহার।
স্টিফেন রোল্যান্ড

24

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

(পার্শ্ব-নোট: তিনি কেন সি +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++]]] পার্থক্য দ্রষ্টব্য: তিনি কেন সি +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ আরও বেশি পলিটফেস করুন এই কারণে সি বেছে নিতে পারে।)


51
-1লিনাসের ভাড়ার জন্য : - {
এসবিআই

12
তার জন্য আমাকে বিয়োগ করবেন না! হা হা। আমি লিনাসের সাথে একমত নই, তবে কেন লোকেরা সি ++ এর চেয়ে বেশি পছন্দ করতে পারে (লিনাস কী বিশ্বাস করে যদি তারা বিশ্বাস করে) তবে এটি একটি দুর্দান্ত উদাহরণ। আমি এই কারণগুলির বৈধতা সম্পর্কে মন্তব্য করছি না।
কেসি প্যাটন

10
@ ক্যাসিপ্যাটন: মূলত, আমি প্রতিটি উত্তরকে নীচে ফেলেছি যা এই বক্তৃতাবাদী বাজে মন্তব্যকে নিঃশর্ত মনে করে যেন এটি সত্যই যুক্তি a
sbi

11
@ কোডার: আপনাকে মোটেও এসটিএল বাস্তবায়ন জানতে হবে না। এসটিএলটির মূল বিষয়টি হ'ল আপনাকে বাস্তবায়ন সম্পর্কে জানতে হবে না, যদি না আপনি স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত আচরণের উপর নির্ভর করেন-তবে এই ক্ষেত্রে স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে বিরক্ত করবেন কেন? তদ্ব্যতীত, এটি বিকাশকারীরা কীভাবে আচরণ করে সে কারণে কোনও ভাষা পছন্দ করা বাচ্চাদের উন্মাদতার চেয়ে বেশি। সি প্রোগ্রামাররা সি'র মতো God'sশ্বরের উপহার হিসাবে আচরণ করে এবং সি ++ এমন বৈশিষ্ট্যগুলি সরবরাহ করে যা স্পষ্টত সত্যটি বুঝতে পেরে অন্ধ হয়ে যায় যেগুলি মূলত এবং অভ্যন্তরীণভাবে সিআই থেকে আরআইআই এর মতো সরাসরি উচ্চতর হয়।
ডেডএমজি

8
@ কোডার: আপনি যদি এমন একক অবজেক্টের সাথে এতগুলি শেয়ার্ড_প্টার শেষ করেন যে আপনি অভ্যন্তরীণ কাউন্টারকে উপচে ফেলেছেন তবে আপনি এটি ভুল করছেন। স্ট্যান্ডার্ডটি কাউন্টারটির জন্য একটি ন্যূনতম আকার নির্দিষ্ট করবে - সম্ভবত 32 বিট- এবং এটি একটি একক অবজেক্টে 2 বিলিয়ন এর বেশি শেয়ারড_পটার থাকতে হবে এটি অবাস্তব। এমনকি যদি অবজেক্টটির নিজেই 0 আকার থাকে এবং আপনার শূন্য ওভারহেড মেমরি বরাদ্দকারী থাকে, তবে আপনি এখনও কেবল শেয়ারড_প্টারগুলিতে 16 গিগাবাইট মেমরি গ্রহণ করছেন।
ডেডএমজি

13

বিদ্যমান উত্তরগুলি (এই পোস্টিংয়ের সময় হিসাবে) থেকে অনুপস্থিত মূল সমস্যাটি হ'ল পছন্দ।

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

এজন্য সি ++ হ'ল অন্তর্নিহিত উচ্চতর ভাষা- আপনি চেরি আপনার পছন্দসই বৈশিষ্ট্যগুলি চয়ন করতে পারেন এবং যখন আপনি কোনও প্রদত্ত বৈশিষ্ট্য অপছন্দ করেন তখন সি-স্টাইল প্রোগ্রামিংয়ে ফিরে যেতে পারেন। সুতরাং, সি ++ হ'ল সি হ'ল সবকিছুই আরও বেশি, এটি একটি স্পষ্ট সত্য যে সি ++ একটি উচ্চতর ভাষা। অন্যথায় পরামর্শ দেওয়া 4 টি 5 এর চেয়ে বেশি হওয়ার পরামর্শ দেওয়ার চেষ্টা করার মতো।


1
আপনার যুক্তি অনুসরণ করে মূল প্রশ্নে মোটেই কোনও লাভ নেই এবং তাই এটি বন্ধ করা উচিত। আমি অনুমান করি যে প্রশ্নটি এমন কিছু পড়তে হবে: কখন আমাদের নিজেদেরকে সি ++ (সাদামাটা সি ব্যবহার করুন) এর সি উপসেটের মধ্যে সীমাবদ্ধ করা উচিত এবং কখন পুরো সি ++ ব্যবহার করার জন্য এটি বোধগম্য হয় না?
জর্জিও

এটি সত্য, তবে কেবলমাত্র একজন ব্যক্তি তাদের নিজস্ব প্রকল্পে কাজ করছেন for বাস্তব জীবনে প্রায় প্রত্যেকেই তাদের অর্ধেক সময় অন্য ব্যক্তির কোড নিয়ে কাজ করে। দুর্ভাগ্যক্রমে বেশিরভাগ লোকেরা এই সম্পূর্ণ যুক্তিযুক্ত কারণে "ভুল মনে করে"।
ড্যারেনডাব্লু

1
@ ডেড এমএমজি: বরাদ্দকারীরা কীভাবে ব্যতিক্রম ছুঁড়ে না ফেলে ত্রুটিগুলি রিপোর্ট করার অর্থ? এছাড়াও, আরও বৈশিষ্ট্য যুক্ত করা অগত্যা আরও ভাল হয় না যখন এটি সমস্ত কিছু জটিলতা বা বাড়াবাড়ি যুক্ত করে।
মনকারসে

@ মনকারসে: আপনি যদি ব্যতিক্রমগুলি অক্ষম করার বিকল্পগুলির সাথে সংকলন করেন, তবে বরাদ্দকারীরা হয় প্রোগ্রামটি বাতিল করে দেয় বা লাইব্রেরির প্রয়োগের উপর নির্ভর করে নাল পয়েন্টারটি ব্যবহার করে আনন্দের সাথে এগিয়ে যায়।
ঝ্যান লিংস

4
@ মঙ্কারসে: ২০০ in সালে আমার অভিজ্ঞতা যেহেতু আমি যখন 1 জিবি র‌্যাম এবং কোনও অদলবদল নিয়ে লিনাক্স সিস্টেম চালানোর চেষ্টা করছিলাম তখন প্রায় সমস্ত ডেস্কটপ সফ্টওয়্যার ভয়াবহ ভয়ঙ্কর উপায়ে ব্যর্থ হয় যখন মেমরির বরাদ্দ যাইহোক ব্যর্থ হয়।
জ্যান লিংস

9

সি ++ সম্পর্কিত বিষয় যা সি প্রোগ্রামারগুলিকে নার্ভাস করে

গুদের নীচে প্রচুর যাদু ঘটছে; কনস্ট্রাক্টর, ডেস্ট্রাক্টর, ভার্চুয়াল পদ্ধতি, টেমপ্লেটস ইত্যাদি সমতুল্য সি কোডের তুলনায় সি ++ কোড লিখতে অনেক সহজ এবং দ্রুত করতে পারে, তবে এর মাধ্যমে বোঝা এবং যুক্তি (আপনি সি ++ এবং এর সম্পর্কিত কনভেনশনগুলি কতটা ভাল জানেন তার উপর নির্ভর করে)। হিসাবে হিসাবে সহজ কিছু Foo newFoo;একটি ডাকা হতে পারে অনেক , কোড কীভাবে বর্গ জন্য কন্সট্রাকটর উপর নির্ভর করে Foo(এবং কোনো শ্রেণীর উপর নির্ভর করে) সংজ্ঞায়িত করা হয়েছে। কনটেইনারে পুনরাবৃত্তি করার ++itপরিবর্তে কনভেনশনটি লিখতে হবে it++কেননা পোস্টফিক্সে ++প্রায়শই একটি ব্যয়বহুল অনুলিপি অপারেশন জড়িত।

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

/* C version */
#include <stdio.h>
int main(void)
{
  char greeting[] = "Hello, world";
  printf("%s\n", greeting);
  return 0;
}
/* end C version */

/* C++ version */
#include <iostream>
#include <string>
int main(void)
{
  std::string greeting("Hello, world");
  std::cout << greeting << std::endl;
  return 0;
}
/* end C++ version */

মূল আচরণ, উত্সের দিক থেকে পুরো পার্থক্য নয়, তবে এসসিএলএস 10 বাক্সে আমি জিসিসি ৪.১.২ নিয়ে কাজ করি, প্রাক্তনটি ~ 9 কেবি আকারের এক্সিকিউটেবল উত্পাদন করে, অন্যদিকে 12.5kb (কোনও অপ্টিমাইজেশন) লাগে না ), প্রায় 28% বড়। stringসি স্ট্রিং লাইব্রেরির চেয়ে আইএমওর সাথে সি ++ টাইপ কাজ করা অনেক সহজ, এবং সি ++ স্ট্রিমগুলি সি স্ট্রিমের চেয়ে অনেক বেশি নমনীয় এবং কাস্টমাইজযোগ্য, তবে সত্যিকারের মস্তিষ্ক-মৃত কোডের জন্য এগুলি ওভারহেডের পক্ষে মূল্যবান নাও হতে পারে

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

সি সম্পর্কে বিষয়গুলি যা সি ++ প্রোগ্রামারগুলিকে নার্ভাস করে

সি কোনও কল্পনা দ্বারা কোনও সুরক্ষিত প্রোগ্রামিং ভাষা নয়; কোনো সীমার মধ্যে রাখার অ্যারে তে টিক চিহ্ন দেওয়ার (বর্তমানে মৃত মাধ্যমে এটা হতে নানারকম আচরণ প্রচুর বাড়ে getsবা মাধ্যমে ফাংশন scanfসঙ্গে %sএবং %[রূপান্তর নির্দিষ্টকরী)। সি ++ কমপক্ষে আপনাকে এমন ধারক সরবরাহ করে যা আপনি যদি তাদের বর্তমানে সংজ্ঞায়িত ব্যাপ্তির বাইরে অ্যাক্সেস করার চেষ্টা করেন তবে ব্যতিক্রম ছুঁড়ে দেয়; সমস্ত সি আপনাকে দেয় (যদি আপনি ভাগ্যবান) একটি বিভাজন লঙ্ঘন।

সিতে মেমরি পরিচালনা খুব পরিশ্রমী এবং ত্রুটিযুক্ত প্রবণ, যে সরঞ্জামগুলি সি ++ আপনাকে সরবরাহ করে তার তুলনায়। যদি আপনি নিজের কন্টেইনারটি তৈরি করে থাকেন তবে বরাদ্দ সফল হয়েছে তা নিশ্চিত করার জন্য, কোনও ত্রুটি ইত্যাদির ক্ষেত্রে কোনও আংশিক বরাদ্দকে ব্যাক আপ করা ইত্যাদি নিশ্চিত করার জন্য আপনি সমস্ত কল mallocএবং freeকলগুলি মিলে যাওয়ার জন্য দায়বদ্ধ , সি ++ এ আপনি কেবল আইটেমগুলি যুক্ত করুন বা ধারক থেকে আইটেম সরান। যদি সমস্যা হয় তবে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হবে।

তেমনি, সিতে ত্রুটি সামলানো হ'ল সি ++ সরবরাহকারী সরঞ্জামগুলির (যেমন ব্যতিক্রমগুলি) তুলনা করে পাছায় ব্যথা হয়। সত্যিই মজার বিষয়টি যখন আপনি একগুচ্ছ স্মৃতি বরাদ্দ করেন এবং তারপরে আপনার প্রসেসিংয়ে কোনও প্রাচীর আঘাত করেন; যেমন আপনাকে ব্যাকআপ করতে হবে, আপনাকে সেই স্মৃতিটি সঠিক ক্রমে প্রকাশ করতে হবে। সি ++ এবং RAII নীতিগুলি সহ, এটি করা (তুলনামূলকভাবে) সহজ।

সুতরাং আমি কখন অন্যটির ওপরে ব্যবহার করব?

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


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

9

বাজার্ন স্ট্রস্ট্রপ অ্যাপ্লিকেশন এবং সংস্থাগুলির একটি তালিকা বজায় রাখে যা সি ++ ব্যবহার করে; ওসিওপি প্রোগোরিয়াল বনাম যা চান তা নিয়ে আপনি বিতর্ক করতে পারেন তবে আপনি গত 20 বছরে শিল্পের ফলাফল নিয়ে তর্ক করতে পারবেন না।

সি ++ সাধারণত বৃহত্তর স্কেল, মাল্টি ম্যান, জটিল প্রকল্পগুলির জন্য ব্যবহৃত হয় যেখানে পৃথক লোকদের মডুলারাইজড উপাদানগুলিতে কাজ করা দরকার। আপনি অবশ্যই সিতে মডুলারাইজড কোডটি বজায় রাখতে এবং বজায় রাখতে পারেন তবে সি ++ এর অন্তর্নিহিত OOP প্রকৃতি উচ্চতর মডুলারাইজেশন, টেস্টিবিলিটি এবং কোড-পুনঃব্যবহারের দিকে পরিচালিত করে।

কেবলমাত্র ভেক্টর এবং মানচিত্র সহ সি ++ স্ট্যান্ডার্ড লাইব্রেরি (এসটিএল), সি ++ ব্যবহারের যথেষ্ট কারণ।

এম এমবেডড সিস্টেমে সাধারণত সি ব্যবহৃত হয়।

আমি ব্যক্তিগতভাবে কেবলমাত্র সি ব্যবহার করব যদি এমন কোনও লাইব্রেরি থাকে যেখানে কেবলমাত্র একটি সিপিআই থাকে।


19
আপনার চূড়ান্ত বাক্যটি সি ব্যবহারের কোনও কারণ নয় libra আপনি সি ++ থেকে সি লাইব্রেরি কল করতে পারেন।
ব্যবহারকারী 207421

2
আমি একটি ডিএসপি প্রকল্পের জন্য C ++ ব্যবহৃত - না গ
BЈовић

9

আমি বলব যে আমি সি +++ এর চেয়ে কেন সি বেছে নেব তার মূল কারণটি কেবল তখনই যখন আমাকে "এটি এই 1000% স্থিতিশীল" নাসা ধরণের স্টাফ অবলম্বন করতে হবে।

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

অন্যদিকে সি ++ এর প্রচুর বিমূর্ততা রয়েছে। পরিস্থিতিতে যখন তারা ফাঁস হয়, এটি আপনাকে সমস্যায় ফেলবে। এবং এমন কয়েক জন লোক আছেন যারা 100% সি ++ গ্যাটাচস জানেন, তবে আমার ধারণা, আরও অনেকগুলি রয়েছে যা সমস্ত সি গ্যাটাচস জানেন, সুতরাং একটি সমাধান লিখতে যেখানে প্রতিটি দলের প্রত্যেক সদস্যের দ্বারা সম্পূর্ণরূপে বোঝা যায় সি তে অনেক সহজ C.

উদাহরণ: আপনি কি জানেন যে shared_ptr<smthn>এর রেফারেন্স গণনা কখন উপচে যাবে, এটি কি একটি ব্যতিক্রম ছুঁড়ে দেবে? এই জাতীয় জিনিসগুলি শীতল যখন পরিবেশে আবার প্রবেশ করতে হবে তা শীতল নয়, কমপক্ষে আমারও ধারণা।

এছাড়াও, ব্যতিক্রম কোডের তুলনায় ব্যতিক্রম হ্যান্ডলিং খুব শক্ত। ক্লাসটি 100% ব্যতিক্রম নিরাপদ এবং ফাঁস করা সহজ কিনা তা দেখতে অসুবিধা হয়। প্রচুর উচ্চ প্রতিনিধিরা এই মত প্রকাশ করেছেন।


12
এবং কোন উপায়ে সঠিকভাবে ম্যানুয়ালি C ++ 'এর মতো বিমূর্ততা std::stringএবং পছন্দগুলির চেয়ে "আরও স্থিতিশীল" পরিচালনা করছে? আপনি কি কখনও এমন প্ল্যাটফর্ম নির্দিষ্ট করার চেষ্টা করেছেন যেখানে shared_ptrএর পাল্টা উপচে পড়বে? এটি একটি মজার প্ল্যাটফর্মের হেক হবে। এবং যদি আপনি ভাবেন যে ব্যতিক্রম হ্যান্ডলিংগুলি শক্ত, তবে আপনার সি সি কোডের একটি অংশে নজর রাখা উচিত যা প্রতিটি ফাংশন কলে প্রতিটি সম্ভাব্য ত্রুটির জন্য পরীক্ষা করে। (এই জাতীয় কোডটি আসা খুব কঠিন, আমি স্বীকার করি, তবে এটি আপনার বক্তব্যের বিরুদ্ধে আরও একটি শক্ত যুক্তি)) দুঃখিত, তবে এটি সত্যিকার অর্থেই স্ত্রীলোকের মিশ্রণ।
এসবিআই

12
@ লন্ডিন: '"এটি 1000% স্থিতিশীল হতে হবে" প্রয়োগগুলি প্রথম স্থানে গতিশীল মেমরি বরাদ্দ দেয় না'। এবং আপনাকে সি ++ তে ঠিক কী করা থেকে বিরত রাখবে ?? (এবং কোনও যুক্তি সরবরাহ করার চেয়ে আমার জ্ঞান এবং অভিজ্ঞতা সম্পর্কে কম্বল বক্তব্য দেওয়া বরং একটি সস্তা ব্যঙ্গাত্মক কৌশল))
এসবিআই

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

9
@ লন্ডিন অবশ্যই আপনি ব্যবহার করতে চাইবেন না std::stringযদি আপনি গতিশীল বরাদ্দ না চান। আপনি ব্যবহার করবেন std::basic_string<char, std::char_traits<char>, some_allocator_here>
লুক ড্যান্টন

10
@ কোডার: এগুলি দিয়ে আপনি কী প্রমাণ করেছেন বলে আপনি মনে করেন? প্রথমটি হ'ল ব্যাড কোড (এবং এটি রিটার্নের মানগুলির মতো খারাপ প্রতিবেদনের ত্রুটি হবে), দ্বিতীয়টি ম্যানুয়াল ক্লিনআপ নিয়ে আরআইআইয়ের জন্য একটি মামলা করে যার প্রতি অর্ধ-শালীন সি ++ দেব আনন্দিত করবে এবং জোয়েল, যতটা আমি তাকে সম্মান করুন, এমন কিছু কথা বলেছেন যার সাথে আমি দৃ strongly়ভাবে একমত নই। সিঙ্গল-এন্ট্রি-একক-প্রস্থানের জন্য তাঁর প্লাগটি কোনও অজ্ঞাতপরিচয় পুরানো বাচ্চা খারাপভাবে খারাপভাবে প্রত্যাশা করে যে 25 বছর আগে সে যা শিখেছিল তা ছাড়িয়ে যায় তা কখনই রাজি হবে না। (আপনি মনে করবেন, আমি ছিল 25 বছর আগে, প্রোগ্রামিং যখন সেসে শিল্প রাষ্ট্র ছিল।)
এসবিআই

6

সি হ'ল আরও ভাল বাক্য গঠন সহ পোর্টেবল অ্যাসেমব্লি, প্রোগ্রামারকে সমস্ত কিছুর সম্পূর্ণ নিয়ন্ত্রণ দেয়

অন্যদিকে সি ++, প্রচুর মজাদার ম্যাজিক (ভার্চুয়াল ফাংশন, ওভারলোডিং, স্বয়ংক্রিয় রূপান্তর, ইত্যাদি) করে যা আপনি যখন নিশ্চিত করতে চান তখন পছন্দসই হতে পারে না:

  • আপনি চান চেয়ে বেশি মেমরি ব্যবহার করবেন না
  • মেমরি পৃষ্ঠাগুলি উইলি নিলি অ্যাক্সেস করবেন না (ভিটেবিল যে কোনও জায়গায় হতে পারে)
  • দুর্ঘটনাক্রমে অনেক কোডে অনুরোধ করবেন না

আপনি যেহেতু পারফরম্যান্সের উপর ফোকাস করছেন সেহেতু এবং এর সাথে কাজ করার জন্য খুব সহজ কিছু চান।

এটির কোনও বিস্ময় নেই, এবং এটি খুব মূল্যবান।

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

এছাড়াও, সি বজ্রপাত দ্বারা আঘাত করা একটি স্কেল্ডড ট্রলের মতো সংকলন করে। সি ++, ওটিওএইচ সম্ভবত এসএসডি সংস্থাগুলিতে বিনিয়োগকারী একই ব্যক্তিরা স্পনসর করেছিলেন। :)

(ব্যক্তিগতভাবে, আমি যদিও সি ++ পছন্দ করতাম তবে আমি এটি পছন্দ করি না ...... হয় !.- পি)


1
সি অনেকগুলি নিয়ন্ত্রণ নিয়ন্ত্রণ দেয় না এমন অনেকগুলি বিষয় রয়েছে। একটি কার্যকর পোর্টেবল কোড লেখার চেষ্টা করুন একটি uint32_t দ্বারা একটি uint32_t ফলাফল (উত্পাদনের নীচে 32 বিট) উত্পাদনের জন্য একটি uint32_t দ্বারা একটি uint32_t দ্বারা গুন করতে। যদি একটি b৪ বিট হয় তবে অপরিজ্ঞাত আচরণটি রোধ intকরতে একজনকে অবশ্যই কমপক্ষে একটি অপরেন্ড আবদ্ধ করতে uint64_tহবে, তবে 32-বিটের ফলাফল গণনার উদ্দেশ্যে 64৪ বিট দিতে হবে - এটিকে হালকাভাবে রেখে দেওয়া - "অবাক করা"।
সুপারক্যাট

এটা না। সংকলকটি আপনার জন্য নিবন্ধের বরাদ্দের মতো কাজ করে। আমি সমাবেশে রক্ষণাবেক্ষণযোগ্য কোড লিখতে পারি না, সিআই করতে পারি।
নিলস

2

(উভয় ভাষার সাথে আপনার সমান পরিচিতি রয়েছে)

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

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


1

দুটি ভাষাই দুর্দান্ত। আমি মনে করি যে বেশ কয়েকটি পোস্টার প্রতিটিটির জন্য বিভিন্ন শক্তি এবং বিভিন্ন ব্যবহারের বিস্তারিত বর্ণনা দিয়েছে। আমি কেবল এটি যোগ করব:

আমি চারটি ক্ষেত্রে সি ভাষাটিকে নিখুঁত দেখছি: 1) আমার মনে হয় যে কোনও ধরণের প্রোগ্রামিং [কিছুটা সমাবেশ এবং মেশিনের কোডের জ্ঞানের সাথে মিলিত] শেখার সময় এটি ব্যবহার করার সেরা ভাষা, ২) ড্রাইভার লেখার জন্য এটি দুর্দান্ত, 3) এম্বেড করা সফ্টওয়্যার এবং 4) সর্বনিম্ন স্তরে সিস্টেম সফ্টওয়্যার

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


0

আমার মতে এই আলোচনায় একটি পয়েন্ট অনুপস্থিত: একটি লাইব্রেরি থেকে স্থিতিশীল বাইনারি ইন্টারফেস সরবরাহ করা সি তে সহজ। অন্যান্য ভাষার পাশাপাশি সি ++ ব্যবহারের জন্য উভয়ই।

সি ++ তে বিভিন্ন সংকলক বিভিন্ন নামের ম্যাংলিং ব্যবহার করে যাতে গ্রন্থাগারের থেকে আলাদা একটি সংকলক সংকলিত একটি গ্রন্থাগারের গ্রাহকরা এটি ব্যবহার করতে সমস্যা হতে পারে। সি দিয়ে বাইনারি ইন্টারফেসটি সাধারণত প্ল্যাটফর্মের জন্য মানক করা হয়।

আমি জানি যে সংকলকরা আজকাল প্রায়শই জিসিসি-সামঞ্জস্যপূর্ণ জিনিসগুলি তৈরি করতে সুইচ রাখেন তবে এটি সর্বদা সহায়তা করে না।

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


0

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

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

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