এসেম্বলি কোড জেনারেশন, উপলব্ধ গ্রন্থাগার, ভাষার বৈশিষ্ট্য ইত্যাদির ক্ষেত্রে সি এবং সি ++ কোড সংকলন করার সময় 3 সংকলক সিসি, জিসিসি, জি ++ এর মধ্যে পার্থক্য কী?
এসেম্বলি কোড জেনারেশন, উপলব্ধ গ্রন্থাগার, ভাষার বৈশিষ্ট্য ইত্যাদির ক্ষেত্রে সি এবং সি ++ কোড সংকলন করার সময় 3 সংকলক সিসি, জিসিসি, জি ++ এর মধ্যে পার্থক্য কী?
উত্তর:
এর উত্তর প্ল্যাটফর্ম-নির্দিষ্ট; লিনাক্সে যা ঘটে তা সোলারিসের ঘটনার থেকে পৃথক, উদাহরণস্বরূপ।
সহজ অংশ (কারণ এটি প্ল্যাটফর্ম-নির্দিষ্ট নয়) হ'ল 'জিসিসি' এবং 'জি ++' এর বিচ্ছেদ:
শক্ত অংশ, কারণ এটি প্ল্যাটফর্ম-নির্দিষ্ট, এটি 'সিসি' (এবং 'সিসি') এর অর্থ।
তবে সোলারিসেও এটি হতে পারে যে সিসি হল পুরানো বিএসডি-ভিত্তিক সি সংকলক /usr/ucb
। বাস্তবে, এটি সাধারণত ইনস্টল করা হয় না এবং কেবলমাত্র একটি স্টাব ব্যর্থ হয়, যারা স্ব-কনফিগারেশন সফ্টওয়্যার সংকলন এবং ইনস্টল করার চেষ্টা করে তাদের উপর সর্বনাশ ডেকে আনে।
এইচপি-ইউএক্স-এ, ডিফল্ট 'সিসি' এখনও একটি কে ও আর-সি সি কম্পাইলার ইনস্টল করা হয়েছে যখন প্রয়োজন হয় তখন কার্নেলের সাথে পুনরায় সংযোগের অনুমতি দেওয়ার জন্য এবং আধুনিক সফ্টওয়্যার কাজের জন্য অব্যবহৃত কারণ এটি আদর্শ সি সমর্থন করে না আপনাকে বিকল্প সংকলক নাম ব্যবহার করতে হবে ('acc' আইআইআরসি)। একইভাবে, এআইএক্সে, সিস্টেম সি সংকলকটি 'xlc' বা 'xlc32' এর মতো নামে যায়।
ধ্রুপদীভাবে, ডিফল্ট সিস্টেম সংকলকটিকে 'সিসি' বলা হত এবং স্ব-কনফিগারিং সফটওয়্যারটি সেই নামে ফিরে আসে যখন অন্য কী কী ব্যবহার করতে হয় তা জানে না।
পিসিক্স প্রোগ্রামটি সি 89 (মূলত) এবং পরবর্তীকালে সি 99 এর উপস্থিতির প্রয়োজনে এটিকে ঘিরে আইনটি তৈরি করার চেষ্টা করেছিল; এগুলি আইএসও / আইসিসি 9899: 1989 এবং 9899: 1999 সি স্ট্যান্ডার্ডের সাথে সামঞ্জস্যপূর্ণ সংকলক। এটি সন্দেহজনক যে পসিক্স সফল হয়েছিল।
বৈশিষ্ট্য এবং গ্রন্থাগারের ক্ষেত্রে পার্থক্য সম্পর্কে প্রশ্ন জিজ্ঞাসা করে। আগের মত, উত্তরটি অংশে নির্দিষ্ট প্ল্যাটফর্ম এবং কিছু অংশে জেনেরিক।
বড় বিভাজনটি সি সংকলক এবং সি ++ সংকলকগুলির মধ্যে রয়েছে। সি ++ সংকলকগুলি সি ++ প্রোগ্রাম গ্রহণ করবে এবং যথেচ্ছ সি প্রোগ্রামগুলি সংকলন করবে না। (যদিও সি -++ দ্বারা বোঝা যায় এমন একটি উপসেটে সি লেখা সম্ভব, অনেক সি প্রোগ্রাম বৈধ সি ++ প্রোগ্রাম নয়)। একইভাবে, সি সংকলকগুলি সি প্রোগ্রামগুলি গ্রহণ করবে এবং বেশিরভাগ সি ++ প্রোগ্রামকে প্রত্যাখ্যান করবে (কারণ বেশিরভাগ সি ++ প্রোগ্রাম সিটিতে উপলব্ধ কনস্ট্রাক্ট ব্যবহার করে)।
ব্যবহারের জন্য উপলব্ধ গ্রন্থাগারগুলির সেট ভাষার উপর নির্ভর করে। সি ++ প্রোগ্রামগুলি সাধারণত প্রদত্ত প্ল্যাটফর্মে সি লাইব্রেরি ব্যবহার করতে পারে; সি প্রোগ্রামগুলি সাধারণত সি ++ লাইব্রেরি ব্যবহার করতে পারে না। সুতরাং, সি ++ এর কাছে আরও বড় গ্রন্থাগার রয়েছে।
মনে রাখবেন যে আপনি যদি সোলারিতে থাকেন তবে সিসি দ্বারা উত্পাদিত অবজেক্ট কোডটি জি ++ দ্বারা উত্পাদিত অবজেক্ট কোডের সাথে সামঞ্জস্যপূর্ণ নয় - এগুলি ব্যতিক্রম হ্যান্ডলিং এবং নাম ম্যাংলিংয়ের মতো বিষয়গুলির জন্য পৃথক কনভেনশন সহ দুটি পৃথক সংকলক (এবং নাম ম্যাংলিং ইচ্ছাকৃতভাবে হয় বেমানান বস্তু ফাইলগুলি একসাথে লিঙ্কযুক্ত নয় তা নিশ্চিত করার জন্য আলাদা!)। এর অর্থ হ'ল আপনি যদি সিসির সাথে সংকলিত একটি লাইব্রেরি ব্যবহার করতে চান তবে আপনাকে অবশ্যই পুরো প্রোগ্রামটি সিসির সাথে সংকলন করতে হবে। এর অর্থ হ'ল আপনি যদি সিসির সাথে সংকলিত একটি লাইব্রেরি এবং অন্যটি জি ++ দিয়ে সংকলিত ব্যবহার করতে চান তবে আপনার ভাগ্য নেই। আপনাকে কমপক্ষে একটি লাইব্রেরি পুনরায় সংকলন করতে হবে।
উত্পাদিত এসেম্বলারের মানের দিক থেকে, জিসিসি (জিএনইউ সংকলক সংগ্রহ) খুব ভাল কাজ করে। তবে কখনও কখনও নেটিভ কম্পাইলাররা কিছুটা ভাল কাজ করেন। আমি বিশ্বাস করি যে ইন্টেল সংকলকগুলির আরও বিস্তৃত অপ্টিমাইজেশন রয়েছে যা এখনও জিসিসিতে প্রতিলিপি করা হয়নি। তবে এ জাতীয় কোনও পন্টিফিকেশন বিপজ্জনক হলেও আপনি কী প্ল্যাটফর্মের সাথে সম্পর্কিত তা আমরা জানি না।
ভাষার বৈশিষ্ট্যগুলির ক্ষেত্রে, সংকলকগুলি সাধারণত সমস্ত বর্তমান মান (সি ++ 98, সি ++ 2003, সি 99) এর সাথে মোটামুটি কাছাকাছি চলে যায় তবে সাধারণ ভাষা এবং সংকলক দ্বারা সমর্থিত ভাষার মধ্যে সাধারণত ছোট পার্থক্য থাকে। পুরানো সি 89 স্ট্যান্ডার্ড সমর্থন মূলত সমস্ত সি সংকলকগুলির জন্য একই (এবং সম্পূর্ণ)। ভাষার অন্ধকার কোণে পার্থক্য রয়েছে। আপনার 'অপরিজ্ঞাত আচরণ', 'সিস্টেমের সংজ্ঞায়িত আচরণ' এবং 'অনির্ধারিত আচরণ' বুঝতে হবে; আপনি যদি অনির্ধারিত আচরণের জন্য আবেদন করেন, আপনি বিভিন্ন সময়ে বিভিন্ন ফলাফল পাবেন। সংকলকটির আচরণটি টুইঙ্ক করার জন্য অনেকগুলি বিকল্প রয়েছে (বিশেষত জিসিসির সাথে)। জিসিসির বিভিন্ন প্রকারের এক্সটেনশন রয়েছে যা আপনি যদি জানেন যে আপনি কেবল সেই সংকলক পরিবারকেই টার্গেট করছেন life
CC
সিস্টেমের সি সংকলককে উল্লেখ করে একটি পরিবেশগত পরিবর্তনশীল। এটি (লাইব্রেরিগুলিতে অ্যাক্সেসযোগ্য ইত্যাদি) কী নির্দেশ করে তা প্ল্যাটফর্মের উপর নির্ভর করে। প্রায়শই এটি নির্দেশ করবে /usr/bin/cc
, আসল সি সংযোগকারী (ড্রাইভার)। লিনাক্স প্ল্যাটফর্মগুলিতে CC
প্রায় সর্বদা পয়েন্ট করে /usr/bin/gcc
।
gcc
জিএনইউ সংকলক সংগ্রহের জন্য ড্রাইভার বাইনারি। এটি সি, সি ++ এবং সম্ভবত অন্যান্য ভাষা সংকলন করতে পারে; এটি ফাইল এক্সটেনশন দ্বারা ভাষা নির্ধারণ করে।
g++
এটি ড্রাইভার বাইনারি মত gcc
, তবে সি ++ সংকলনের জন্য কয়েকটি বিশেষ বিকল্প সেট করে। উল্লেখযোগ্যভাবে (আমার অভিজ্ঞতার সাথে), g++
libstdc ++ কে ডিফল্টরূপে লিঙ্ক করবে, যদিও তা gcc
করবে না।
./configure
+ ব্যবহৃত সি সংকলককে প্রভাবিত করার জন্য make
একটি এনভায়রনমেন্ট ভেরিয়েবল নিতে CC
পারে তবে অন্যথায় সেই নামে সাধারণত কোনও পরিবেশের পরিবর্তনশীল হয় না।
আমি লিনাক্সে সিসি কী মাত্র একটি তথ্য যুক্ত করতে চাই। এটি জিসিসির সাথে যুক্ত। এটি পরীক্ষা করার জন্য।
একইভাবে, সি ++ সহ একই জিনিস।
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ whereis c++
c++: /usr/bin/c++ /usr/include/c++ /usr/share/man/man1/c++.1.gz
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ ls -l /usr/bin/c++
lrwxrwxrwx 1 root root 21 Jul 31 14:00 /usr/bin/c++ -> /etc/alternatives/c++
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ ls -l /etc/alternatives/c++
lrwxrwxrwx 1 root root 12 Jul 31 14:00 /etc/alternatives/c++ -> /usr/bin/g++