সি ++ লিঙ্কেজ ভাষা সি ছাড়া অন্য কি?


25

সি ++ ভাষা একটি উত্স ফাইলে সি ++ এবং সি উভয়ের অন্তর্নিয়োগের অনুমতি দেয়। উদাহরণ স্বরূপ,

extern "C" {
    struct bar { /* ... */ }
}

সি ++ কি এটি কখনও সি ছাড়া অন্য কোনও "লিঙ্কেজ ভাষাগুলি" সমর্থন করে? যেমন extern "Pascal"বাextern "Haskell"


বেশিরভাগ সময় উভয় ভাষা extern "C"একে অপরের সাথে যোগাযোগের জন্য তাদের সমতুল্য কাজ করে
ratchet freak

সি ++ অন্যান্য সংযোগকে কার্যকর করে তাদের লিঙ্কেজের ধরণের (§7.5) যোগ করার অনুমতি দিয়ে, প্রশ্নটি হওয়া উচিত "বাস্তবায়নের কি উপস্থিতি আছে বা বাস্তবায়নগুলি রয়েছে" ";-)
জোহান্নস

2
extern "C"শুধুমাত্র লিঙ্কেজকে প্রভাবিত করে, ব্লকের অভ্যন্তরে পাঠ্যের সিনট্যাক্স এবং শব্দার্থবিজ্ঞানকে নয়। অন্য কথায়, এটি এখনও সেই extern "C"ব্লকের ভিতরে সি ++ ; প্রতীকের নামগুলি ম্যাঙ্গেল করা হয় না। স্ট্যাকওভারফ্লো.com
রিচার্ড হ্যানসেন

উত্তর:


17

extern "C" একমাত্র প্রয়োজনীয় হতে পারে:

প্রতিটি বাস্তবায়ন সি প্রোগ্রামিং ভাষায় লিখিত ফাংশনগুলির সংযোগের জন্য, "সি", এবং সি ++ ফাংশনগুলিতে লিঙ্কেজ প্রদান করবে, "সি ++"।

তবে এই উদ্ধৃতি অনুসারে অন্যদের উপস্থিত থাকতে পারে:

স্ট্রিং-আক্ষরিক প্রয়োজনীয় ভাষার সংযোগ নির্দেশ করে। এই আন্তর্জাতিক স্ট্যান্ডার্ড স্ট্রিং-লিটারালস "সি" এবং "সি ++" এর জন্য শব্দার্থবিজ্ঞান নির্দিষ্ট করে। "সি" বা "সি ++" ব্যতীত স্ট্রিং-আক্ষরিকের ব্যবহার শর্তসাপেক্ষে সমর্থনযোগ্য, প্রয়োগ-সংজ্ঞায়িত শব্দার্থবিদ্যা সহ। [দ্রষ্টব্য: অতএব, স্ট্রিং-লিটারেজের সাথে সংযোগ-নির্দিষ্টকরণ যা বাস্তবায়নের অজানা। একটি ডায়গনিস্টিক প্রয়োজন ost - শেষ দ্রষ্টব্য] [দ্রষ্টব্য: প্রস্তাব দেওয়া হয় যে স্ট্রিং-আক্ষরিকের বানানটি সেই ভাষাটি সংজ্ঞায়িত করে নথি থেকে নেওয়া উচিত। উদাহরণস্বরূপ, মদ উপর নির্ভর করে অ্যাডা (এডিএ নয়) এবং ফোর্টরান বা ফরট্রান। - শেষ নোট]


1
এ কোথা থেকে উদ্ধৃত হয়েছে?
পল

@ পল সি ++ 11 স্ট্যান্ডার্ড খসড়া
অ্যারোনম্যান

9

অনেক (সর্বাধিক) পরিবেশে "বাহ্যিক" সি "সিস্টেমের যে কোনও ভাষার জন্য ডিফল্ট লিঙ্কিং কনভেনশন।

সুতরাং অপারেটিং সিস্টেম এবং "বিদেশী" ভাষার "এক্সটার্ন সি" প্রয়োগের উপর নির্ভর করে আপনাকে অন্য একটি সংকলিত ভাষায় একটি প্রোগ্রাম কল করতে হবে।


এমনকি সি লিঙ্কেজ ব্যবহার না করে এমন পরিবেশগুলি (প্যাস্কাল অর্থাত্ প্রায়শই স্ট্যাকের ক্ষেত্রে অন্যান্য আর্গুমেন্ট অর্ডার ব্যবহার করে এবং কলিটি মানটি মুক্ত করতে হয়) তাদের সি-সামঞ্জস্যপূর্ণ মোড রয়েছে
জোহান্নস

@ জোহানেস: আসলে উইন্ডোজ অনেকগুলি ক্ষেত্রে পাস্কাল কনভেনশন ব্যবহার করে, তবে যেহেতু এটিরও প্রয়োজন যে সিতে এবং সিতেও extern "Language"সিনট্যাক্স নেই, তারা প্ল্যাটফর্ম-নির্দিষ্ট সি এক্সটেনশনের মাধ্যমে এটি করেন, সুতরাং সি ++ এর জন্য এটি এখনও ঠিক extern "C"এবং বিশেষ কীওয়ার্ড বিভিন্ন কলিং কনভেনশন নির্দিষ্ট করে।
জান হুডেক

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


-4
  • না! সি ++ কেবলমাত্র "সংযোগের ভাষা" হিসাবে সি সমর্থন করে support

  • বাহ্যিক "সি" {স্ট্রাক্ট বার {/ * ... * /}

  • উপরের মতো সিনট্যাক্সের অর্থ হ'ল ভেরিয়েবল, স্ট্রাক্ট বা ফাংশনের নাম পরিবর্তন করবেন না। কারণ C ++ ক্লাস, নেমস্পেস এবং ফাংশন ওভারলোডিং বাস্তবায়নের জন্য ভেরিয়েবল, স্ট্রাক্ট বা ফাংশনের নাম পরিবর্তন করতে পারে।

  • যদি আপনি এটি না করেন তবে লিঙ্কারটি সম্ভবত ভেরিয়েবলের অবয়ব, ফাংশন গঠনের সন্ধান করতে পারে না।

  • সি ++ সি এর সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য ডিজাইন করা হয়েছে বহিরাগত "সি" সি এর সাথে সামঞ্জস্যপূর্ণ প্রয়োগের উপায় is


10
দয়া করে সি ++ মানের §7.5 পরীক্ষা করুন। extern "C"এবং extern "C++"একমাত্র বাধ্যতামূলক, তবে বাস্তবায়নগুলি অন্যকে সরবরাহ করার অনুমতি দেয়।
জোহনেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.