সি ++ ইনলাইন সি ইনলাইন থেকে সম্পূর্ণ আলাদা।
#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
একটি নেমস্পেসে, এটি এবং এটি দেখুন