সিআইপি হিসাবে প্রকাশিতভাবে একটি সি ++ কোড প্রকাশ করার অর্থ কী এবং এটি করার সুবিধা কী কী?


25

আমি প্রায়শই লোকদের বলতে শুনেছি যে সি ++ প্রোগ্রামারদের তাদের লাইব্রেরির / পণ্যটির পাবলিক এপিআই সি সি এপিআই হিসাবে প্রকাশ করা উচিত।

এর অর্থ কী এবং এর সুবিধাগুলি কী?

উত্তর:


44

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

extern "C" void foo(int bar);

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

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


14
হয় ছোঁড়া ব্যতিক্রম রফতানি না করতে আপনাকে অবশ্যই যত্নবান হতে হবে!
জেমস

এটি একটি দুর্দান্ত উত্তর। আপনি কি স্টাফের একটি উদাহরণ দিতে extern "C"পারেন, যা আমি পাইনি?
ড্যানিয়েল রিবেইরো

1
@ ড্যানিয়েলরিবেইরো: "এক্সটার্ন সি" এর জন্য গুগল মাত্র। আপনি এইগুলির
ডক ব্রাউন

1
@ ড্যানিয়েলরিবিয়েরো, খুব সাধারণ উদাহরণ যুক্ত হয়েছে।
টিমো জিশচ

1
@ ড্যানিয়েলরিবিয়েরো এখনও প্রযুক্তিগতভাবে এটি ব্যবহার সম্ভব .hpp, তবে এই বর্ধনের অর্থ "সি ++ শিরোনাম ফাইল", সুতরাং এটি হওয়া উচিত .h, যা সি এবং সি ++ উভয়ের জন্যই ব্যবহৃত হয়।
লীমস

8

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

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

অবশেষে সি ++ এর আরও অনেক বেশি সংকলন-সময় বৈশিষ্ট্য রয়েছে। উদাহরণস্বরূপ জেনেরিকগুলি সাধারণত গতিসম্পন্ন টাইপ করা ভাষা ইত্যাদিতে থাকে না etc.


2
@DanielRibeiro: সি ++ ABI- র (বিস্ময়কর নরকে স্বাগতম en.wikipedia.org/wiki/Application_binary_interface )। সংক্ষিপ্ত সংস্করণটি হ'ল চুপচাপ ব্যর্থ / ক্রাশ হওয়ার পরিবর্তে সি ++ উপাদান আলাদা আলাদাভাবে সংকলিত (বিভিন্ন সংকলক / পতাকা সহ সংকলিত) একসাথে কাজ করা খুব শক্ত।
ম্যাকিয়েজ পাইচোটকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.