সি ++ ইনলাইন সি ইনলাইন থেকে সম্পূর্ণ আলাদা।
#include <iostream>
extern inline int i[];
int i [5];
struct c {
int function (){return 1;} //implicitly inline
static inline int j = 3; //explicitly inline
};
int main() {
c j;
std::cout << i;
}
inlineসংকলক, এসেম্বলার এবং লিঙ্কারটিকে তার নিজের উপর প্রভাব ফেলে। এটি সংকলকটির নির্দেশিকা যা কেবল অনুবাদ ফাংশনে / ডেটা ব্যবহার করে যদি এটি অনুবাদ ইউনিটে ব্যবহৃত হয় এবং যদি এটি হয় তবে শ্রেণিবদ্ধ পদ্ধতিগুলির মতো এসেম্বলবারকে তাদের বিভাগে .section .text.c::function(),"axG",@progbits,c::function(),comdatবা .section .bss.i,"awG",@nobits,i,comdatডেটা সংরক্ষণ করার জন্য বলুন।
এইটা নিচের .section name, "flags"MG, @type, entsize, GroupName[, linkage]। উদাহরণস্বরূপ, বিভাগটির নাম .text.c::function()। axGমানে এই বিভাগটি বরাদ্দযোগ্য, নির্বাহযোগ্য এবং একটি গ্রুপে একটি গ্রুপের নাম নির্দিষ্ট করা হবে (এবং কোনও এম পতাকা নেই তাই কোনও এনটসাইজ নির্দিষ্ট করা হবে না); @progbitsমানে বিভাগটিতে ডেটা রয়েছে এবং ফাঁকা নয়; c::function()গ্রুপের নাম এবং গ্রুপটি রয়েছেcomdatসংযুক্তির অর্থ যে সমস্ত বস্তু ফাইলগুলিতে, কমড্যাট সহ ট্যাগ করা এই গোষ্ঠীর নামের সাথে দেখা সমস্ত বিভাগ চূড়ান্ত নির্বাহী থেকে বাদ দেওয়া হবে 1 ব্যতীত সংকলকটি নিশ্চিত করে তোলে যে অনুবাদ ইউনিটে কেবল একটি সংজ্ঞা আছে এবং তারপরে এসেম্বলারের বলার জন্য এটি তার নিজের গ্রুপে অবজেক্ট ফাইলে (1 টি বিভাগে 1 বিভাগ) এবং তারপরে লিঙ্কারটি নিশ্চিত করবে যে কোনও বস্তুর ফাইলগুলির যদি একই নামের একটি গ্রুপ থাকে তবে কেবলমাত্র চূড়ান্ত .exe এ একটি অন্তর্ভুক্ত করা উচিত। মধ্যে পার্থক্য inlineএবং ব্যবহার করছেন না inline, কারণ এটা নিয়মিত সঞ্চিত না, এখন প্রতীকী ভাষান্তর প্রয়োজন এবং linker ফলে দৃশ্যমান .dataবা .textতাদের নির্দেশনা কারণে ইত্যাদি প্রতীকী ভাষান্তর দ্বারা।
static inlineশ্রেণিতে এটির অর্থ এটি একটি প্রকারের সংজ্ঞা এবং ঘোষণা নয় (স্থির সদস্যকে শ্রেণিতে সংজ্ঞায়িত করার অনুমতি দেয়) এবং এটিকে ইনলাইন করা; এটি এখন উপরের মতো আচরণ করে।
static inlineফাইল স্কোপে কেবল সংকলককে প্রভাবিত করে। সংকলকটির অর্থ: এটি অনুবাদ ইউনিটে ব্যবহৃত হলে কেবল এই ফাংশন / ডেটার জন্য একটি প্রতীক প্রেরণ করুন এবং এটি নিয়মিত স্ট্যাটিক প্রতীক হিসাবে করুন (.globl ডিরেক্টরি ছাড়াই in.text /.data সঞ্চয় করুন)। সমাবেশকারীর কাছে এখন staticএবং এর মধ্যে কোনও পার্থক্য নেইstatic inline
extern inlineএকটি ঘোষণা যা এর অর্থ আপনাকে অনুবাদ ইউনিটে এই প্রতীকটি সংজ্ঞায়িত করতে হবে বা সংকলক ত্রুটি নিক্ষেপ করতে হবে; যদি এটি সংজ্ঞায়িত হয় তবে এটিকে নিয়মিত হিসাবে বিবেচনা করুন inlineএবং সমাবেশকারী এবং লিঙ্কারের কাছে extern inlineএবং এর মধ্যে কোনও তফাত থাকবে না inline, সুতরাং এটি কেবল একটি সংকলক প্রহরী।
extern inline int i[];
extern int i[]; //allowed repetition of declaration with incomplete type, inherits inline property
extern int i[5]; //declaration now has complete type
extern int i[5]; //allowed redeclaration if it is the same complete type or has not yet been completed
extern int i[6]; //error, redeclaration with different complete type
int i[5]; //definition, must have complete type and same complete type as the declaration if there is a declaration with a complete type
ত্রুটি লাইন ছাড়া উপরের পুরোটি ধসে পড়ে inline int i[5]। স্পষ্টতই যদি আপনি তা করেন extern inline int i[] = {5};তবে externনিয়োগের মাধ্যমে স্পষ্ট সংজ্ঞা দেওয়ার কারণে তা উপেক্ষা করা হবে।
inlineএকটি নেমস্পেসে, এটি এবং এটি দেখুন