শিরোলেখ ফাইলগুলিতে পরিবর্তনশীল ঘোষণা - স্থির বা না?


91

কিছু রিফ্যাকচার করার সময় #definesআমি একটি সি ++ শিরোলেখ ফাইলটিতে নিম্নলিখিতগুলির মতো অনুরূপ ঘোষণাগুলি পেলাম:

static const unsigned int VAL = 42;
const unsigned int ANOTHER_VAL = 37;

প্রশ্নটি হ'ল, কোন পার্থক্য আছে, যদি কোনও হয়, তবে স্থিরটি কী তৈরি করবে? নোট করুন যে ক্লাসিক #ifndef HEADER #define HEADER #endifট্রিকের কারণে শিরোনামের একাধিক অন্তর্ভুক্তি সম্ভব নয় (যদি তা বিবেচিত হয়)।

স্থির অর্থ VALহ'ল একাধিক উত্স ফাইলের দ্বারা শিরোনাম অন্তর্ভুক্ত হওয়ার ক্ষেত্রে কেবল একটি অনুলিপি তৈরি করা হয়েছে?


উত্তর:


107

staticমানে যে এক কপি থাকবে VALপ্রতিটি সোর্স ফাইল এটা অন্তর্ভুক্ত করা হয়েছে জন্য তৈরি। কিন্তু এটিও মানে একাধিক ইনক্লুশান একাধিক সংজ্ঞা হতে হবে না VALযে লিঙ্ক সময়ে ধাক্কা লাগা হবে। সি-তে, staticআপনাকে নিশ্চিত করতে হবে যে VALঅন্য উত্স ফাইলগুলি এটি ঘোষণাকালে কেবলমাত্র একটি উত্স ফাইল সংজ্ঞায়িত করা উচিত extern। সাধারণত কেউ এটি উত্স ফাইলে এটিকে (সম্ভবত কোনও প্রাথমিককরণ সহ) সংজ্ঞায়িত করে এবং externঘোষণাকে একটি শিরোনাম ফাইলে রেখে দেয়।

static বৈশ্বিক স্তরের ভেরিয়েবলগুলি কেবলমাত্র তাদের নিজস্ব উত্স ফাইলে দৃশ্যমান হয় সেগুলি সেখানে অন্তর্ভুক্তের মাধ্যমে পেয়েছিল বা মূল ফাইলটিতে ছিল কিনা।


সম্পাদক এর নোট: ইন সি ++, constসঙ্গে তন্ন তন্ন বস্তু staticকিংবা externকীওয়ার্ড তাদের ঘোষণায় পরোক্ষভাবে হয় static


আমি শেষ বাক্যটির একজন ভক্ত, অবিশ্বাস্যরূপে সহায়ক। উত্তরটি আমি ভোট দিয়েছি না কারণ 42 কারণ ভাল। সম্পাদনা: ব্যাকরণ
রিয়েলডিল_ইই'১৮

"স্থির অর্থ হ'ল এতে অন্তর্ভুক্ত প্রতিটি উত্স ফাইলের জন্য তৈরি করা ভিএল এর একটি অনুলিপি থাকবে" " এর থেকে বোঝা যাচ্ছে যে দুটি উত্স ফাইলে শিরোলেখ ফাইলটি অন্তর্ভুক্ত থাকলে VAL এর দুটি অনুলিপি থাকবে। আমি আশা করছি যে এটি সত্য নয় এবং শিরোনামে যতগুলি ফাইল অন্তর্ভুক্ত করা যায় তা বিবেচনা ছাড়াই সবসময় VAL এর একক উদাহরণ থাকে।
ব্রেন্ট 212

4
@ ব্রেন্ট 212 সংকলক জানে না যে কোনও ঘোষণার / সংজ্ঞাটি শিরোনাম ফাইল বা প্রধান ফাইল থেকে এসেছে কিনা। সুতরাং আপনি বৃথা আশা করি যদি কেউ নির্বোধ হয় এবং একটি শিরোনাম ফাইলে একটি স্থিতিশীল সংজ্ঞা দেয় এবং এটি দুটি উত্সের সাথে অন্তর্ভুক্ত হয়ে যায় তবে ভ্যালির দুটি অনুলিপি থাকবে।
জাস্টসাল্ট

4
কনস্ট মানগুলির সি ++
এড্রিয়ানএন

112

staticএবং externফাইল-scoped ভেরিয়েবল উপর ট্যাগ তা নির্ধারণ তারা অন্যান্য অনুবাদ ইউনিট (অর্থাত অন্যান্য অ্যাক্সেসযোগ্য থাকে .cবা .cppফাইল)।

  • staticঅন্যান্য অনুবাদ ইউনিট থেকে আড়াল করে পরিবর্তনশীল অভ্যন্তরীণ লিঙ্কেজ দেয়। তবে অভ্যন্তরীণ সংযোগ সহ ভেরিয়েবলগুলি একাধিক অনুবাদ ইউনিটে সংজ্ঞায়িত করা যায়।

  • externপরিবর্তনশীল বাহ্যিক সংযোগ দেয় যা এটি অন্য অনুবাদ ইউনিটগুলিতে দৃশ্যমান করে। সাধারণত এর অর্থ এই যে ভেরিয়েবলটি কেবল একটি অনুবাদ ইউনিটে সংজ্ঞায়িত করা উচিত।

ডিফল্ট (যখন আপনি নির্দিষ্ট করবেন না staticবা করবেন extern) সেই অঞ্চলগুলির মধ্যে একটি যেখানে সি এবং সি ++ আলাদা হয়।

  • সি-তে, ফাইল-স্কোপযুক্ত ভেরিয়েবলগুলি externডিফল্টরূপে (বাহ্যিক সংযোগ) হয়। আপনি সি ব্যবহার করছেন, VALহয় staticএবং ANOTHER_VALহয় extern

  • সি ++ এ ফাইল-স্কোপড ভেরিয়েবলগুলি staticডিফল্টরূপে (অভ্যন্তরীণ লিঙ্কেজ) হয় constএবং externডিফল্টরূপে যদি তা না থাকে। আপনি যদি সি ++ ব্যবহার করেন তবে উভয়ই VALএবং ANOTHER_VALহয় static

সি নির্দিষ্টকরণের একটি খসড়া থেকে :

.2.২.২ শনাক্তকারীদের লিংকসমূহ ... -৫- যদি কোনও ফাংশনের জন্য সনাক্তকারী ঘোষণার কোনও স্টোরেজ-শ্রেণীর নির্দিষ্টকরণকারক না থাকে তবে এর সংযোগটি ঠিক যেমন স্টোরেজ-শ্রেণীর নির্দিষ্টকরণকারী বহির্মুখী হিসাবে ঘোষিত হয়েছিল তা নির্ধারিত হয়। যদি কোনও সামগ্রীর জন্য সনাক্তকারী হিসাবে ঘোষণার ক্ষেত্রে ফাইল স্কোপ থাকে এবং স্টোরেজ-শ্রেণীর নির্দিষ্টকরণকারী না থাকে তবে এর সংযোগটি বাহ্যিক।

সি ++ নির্দিষ্টকরণের খসড়া থেকে :

7.1.1 - স্টোরেজ শ্রেণীর নির্দিষ্টকরণকারী [dcl.stc] ... -6- স্টোরেজ-শ্রেণি-নির্দিষ্টকরণ ছাড়াই একটি নাম স্পেসে ঘোষিত একটি নামের বাহ্যিক সংযোগ রয়েছে যদি না এটি পূর্ববর্তী ঘোষণার কারণে অভ্যন্তরীণ সংযোগ না করে এবং সরবরাহ না করে থাকে ঘোষিত কনস্ট অবিলম্বে ঘোষিত এবং প্রকাশ্যভাবে বাহ্যিকভাবে ঘোষিত না করা অবজেক্টগুলির অভ্যন্তরীণ সংযোগ রয়েছে।


47

স্থির অর্থ হ'ল আপনি প্রতি ফাইল প্রতি একটি অনুলিপি পাবেন, তবে অন্যরা এর বিপরীতে বলেছেন এটি করা একেবারে আইনী। আপনি সহজেই একটি ছোট কোডের নমুনা দিয়ে এটি পরীক্ষা করতে পারেন:

পরীক্ষা h:

static int TEST = 0;
void test();

test1.cpp:

#include <iostream>
#include "test.h"

int main(void) {
    std::cout << &TEST << std::endl;
    test();
}

test2.cpp:

#include <iostream>
#include "test.h"

void test() {
    std::cout << &TEST << std::endl;
}

এটি চালানো আপনাকে এই আউটপুট দেয়:

0x446020
0x446040


4
উদাহরণের জন্য ধন্যবাদ!
কিরল

আমি ভাবছি যদি TESTহয় const, এলটিও যদি এটি একটি একক মেমরির স্থানে অনুকূলিত করতে সক্ষম হয়। তবে -O3 -fltoজিসিসির ৮.১ করেনি।
সিরো সান্তিলি :45 冠状 病 六四 事件

এটি করা অবৈধ হবে - এটি স্থির থাকলেও স্থির গ্যারান্টি দেয় যে প্রতিটি উদাহরণ সংকলনের ইউনিটে স্থানীয় local এটি যদি ধ্রুবক হিসাবে ব্যবহৃত হয় তবে এটি সম্ভবত ধ্রুবক মানটিকেই ইনলাইন করতে পারে, তবে যেহেতু আমরা এটির ঠিকানা নিয়েছি এটির জন্য একটি অনন্য পয়েন্টার ফিরিয়ে দিতে হবে।
স্লাইসডলাইম

6

constসি ++ এর ভেরিয়েবলগুলির অভ্যন্তরীণ সংযোগ রয়েছে। সুতরাং, ব্যবহারের staticকোনও প্রভাব নেই।

আহ

const int i = 10;

one.cpp

#include "a.h"

func()
{
   cout << i;
}

two.cpp

#include "a.h"

func1()
{
   cout << i;
}

এটি যদি কোনও সি প্রোগ্রাম হত তবে আপনি i(বহিরাগত সংযোগের কারণে) 'একাধিক সংজ্ঞা' ত্রুটি পাবেন ।


4
হ্যাঁ, ব্যবহারের staticপ্রভাব রয়েছে যে এটি কোনওটি কোডিং করছে তার উদ্দেশ্য এবং সচেতনতার সাথে ইঙ্গিত দেয়, যা কখনই খারাপ জিনিস নয়। আমার কাছে এটি virtualওভাররাইড করার সাথে যুক্ত হওয়ার মতো : আমাদের যখন করা হয় না তখন জিনিসগুলি অনেক বেশি স্বজ্ঞাত দেখা যায় - এবং অন্যান্য ঘোষণার সাথে সামঞ্জস্যপূর্ণ - যখন আমরা করি।
আন্ডারস্কোর_ডি

আপনি সিতে একাধিক সংজ্ঞা ত্রুটি পেতে পারেন এটি কোনও ডায়াগনস্টিকের প্রয়োজন ছাড়াই সংজ্ঞায়িত আচরণ
এমএম

5

কোডের এই স্তরে স্থিতিক ঘোষণার অর্থ হ'ল ভ্যারিয়েবল কেবলমাত্র বর্তমান সংকলন ইউনিটে দৃশ্যমান। এর অর্থ এই যে মডিউলটির মধ্যে কেবল কোডগুলি সেই পরিবর্তনশীল দেখতে পাবে।

আপনার যদি একটি শিরোনাম ফাইল থাকে যা একটি চলক স্থির ঘোষণা করে এবং সেই শিরোনামটি একাধিক সি / সিপিপি ফাইলগুলিতে অন্তর্ভুক্ত থাকে, তবে সেই পরিবর্তনশীলগুলি সেই মডিউলগুলিতে "স্থানীয়" হবে। শিরোনাম অন্তর্ভুক্ত করা হয় এমন N জায়গাগুলির জন্য সেই পরিবর্তকের N কপি থাকবে। এগুলি একে অপরের সাথে সম্পর্কিত নয়। এই উত্স ফাইলগুলির মধ্যে যে কোনও কোডের মধ্যে কেবল সেই মডিউলটির মধ্যে ঘোষিত ভেরিয়েবলের উল্লেখ করা হবে।

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

ইনলাইনিং হিসাবে, এই ক্ষেত্রে ভেরিয়েবল সম্ভবত ইনলাইনড হয়, তবে এটি কেবলমাত্র এটি কনস্ট হিসাবে ঘোষিত হয়েছে। কম্পাইলার পারে ইনলাইন মডিউল স্ট্যাটিক ভেরিয়েবল আরো সম্ভবত হতে, কিন্তু যে অবস্থা উপর নির্ভরশীল এবং কোড কম্পাইল করা হচ্ছে। কম্পাইলারটি 'স্ট্যাটিক্স' ইনলাইন করবে এমন কোনও গ্যারান্টি নেই।


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

এই ক্ষেত্রে, এর কারণে const, এটি অন্তর্ভুক্ত staticএবং তাই henceচ্ছিক। মাইক্রো এফ দাবি হিসাবে একাধিক সংজ্ঞা ত্রুটি সম্পর্কে কোন সংবেদনশীলতা নেই তা মূলত:
আন্ডারস্কোর_ডি

2

সি বইয়ের (নিখরচায় অনলাইনে) লিঙ্কেজ সম্পর্কিত একটি অধ্যায় রয়েছে, যা 'স্ট্যাটিক' এর অর্থ আরও বিশদভাবে ব্যাখ্যা করে (যদিও সঠিক উত্তর ইতিমধ্যে অন্যান্য মন্তব্যে দেওয়া হয়েছে): http://publications.gbdirect.co.uk/c_book /chapter4/linkage.html


2

প্রশ্নের উত্তর দেওয়ার জন্য, "স্থির অর্থের দ্বারা কি ভিএল-এর একটিমাত্র অনুলিপি তৈরি করা যায়, যদি শিরোনামটি একাধিক উত্স ফাইল দ্বারা অন্তর্ভুক্ত থাকে?" ...

না । VAL সর্বদা প্রতিটি ফাইলের মধ্যে পৃথকভাবে সংজ্ঞায়িত করা হবে যার মধ্যে শিরোনাম রয়েছে।

সি এবং সি ++ এর জন্য মান এই ক্ষেত্রে পার্থক্য সৃষ্টি করে।

সি-তে, ফাইল-স্কোপযুক্ত ভেরিয়েবলগুলি ডিফল্টরূপে বাহ্য হয় are আপনি যদি সি ব্যবহার করছেন, ভ্যাল স্থিতিশীল এবং অন্য কেউ_ বাহ্য বাহ্যিক।

নোট করুন যে আধুনিক লিঙ্কাররা ANOTHER_VAL সম্পর্কে অভিযোগ করতে পারে যদি শিরোনামটি বিভিন্ন ফাইলগুলিতে অন্তর্ভুক্ত করা হয় (একই বিশ্বব্যাপী নামটি দু'বার সংজ্ঞায়িত করা হয়েছে), এবং অবশ্যই অন্য কোন ফাইলের মধ্যে অন্য মান_আরওয়ালকে আরম্ভ করা হলে অভিযোগ করবে

সি ++ এ ফাইল-স্কোপযুক্ত ভেরিয়েবলগুলি কনস্ট থাকলে ডিফল্টরূপে স্থির থাকে এবং যদি তা না হয় তবে ডিফল্টরূপে বহিরাগত থাকে। আপনি যদি সি ++ ব্যবহার করেন তবে ভ্যাল এবং আনুয়ার_ভাল উভয়ই স্থিতিশীল।

উভয় ভেরিয়েবল কনস্টেট কনস্টেট করা হয়েছে এ বিষয়টিও আপনার বিবেচনার প্রয়োজন। আদর্শভাবে সংকলক সর্বদা এই ভেরিয়েবলগুলিকে ইনলাইন করতে পছন্দ করবে এবং তাদের জন্য কোনও স্টোরেজ অন্তর্ভুক্ত করবে না। কেন স্টোরেজ বরাদ্দ করা যেতে পারে তার পুরো হোস্ট রয়েছে। আমার সম্পর্কে আমি ভাবতে পারি ...

  • ডিবাগ বিকল্প
  • ফাইলটি নেওয়া ঠিকানা
  • সংকলক সর্বদা স্টোরেজ বরাদ্দ করে (জটিল কনস্টের ধরণেরগুলি সহজেই সন্নিবেশ করা যায় না, তাই মৌলিক ধরণের জন্য একটি বিশেষ ক্ষেত্রে পরিণত হয়)

দ্রষ্টব্য: বিমূর্ত মেশিনে প্রতিটি পৃথক অনুবাদ ইউনিটে ভ্যালির একটি অনুলিপি থাকে যাতে শিরোনাম অন্তর্ভুক্ত থাকে। অনুশীলনে লিঙ্কার যে কোনও উপায়ে তাদের একত্রিত করার সিদ্ধান্ত নিতে পারে এবং সংকলক প্রথমে তাদের কিছু বা সমস্তকে অনুকূলিত করে।
এমএম

1

ধরে নিই যে এই ঘোষণাগুলি বিশ্বব্যাপী স্কোপে রয়েছে (অর্থাত্ সদস্য ভেরিয়েবল নয়) তবে:

স্থির অর্থ 'অভ্যন্তরীণ সংযোগ'। এই ক্ষেত্রে, যেহেতু এটি কনস্টেট হিসাবে ঘোষণা করা হয়েছে এটি সংকলক দ্বারা অনুকূলিত / ইনডিল করা যেতে পারে। আপনি বাদ তাহলে const তারপর কম্পাইলার প্রতিটি সংকলন ইউনিটে স্টোরেজ বরাদ্দ নয়।

বাদ দ্বারা স্ট্যাটিক দুটো ঘটনার হল extern ডিফল্টরূপে। আবার, আপনি কনস্ট নেস দ্বারা সংরক্ষণ করা হয়েছে - সংকলক ইনলাইন ব্যবহার অনুকূলিত করতে / করতে পারেন। আপনি যদি কনস্টটি ফেলে দেন তবে লিঙ্কের সময় আপনি একটি বহুগুণ সংজ্ঞায়িত চিহ্ন ত্রুটি পাবেন।


আমি বিশ্বাস করি যে সংকলকটি অবশ্যই সব ক্ষেত্রে একটি কনস্টের জন্য স্থান বরাদ্দ করতে হবে, যেহেতু অন্য একটি মডিউল সর্বদা "বাহ্যিক কনট ইন যাই হোক না কেন; কিছু (& যাই হোক না কেন)" বলতে পারে;

1

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


"... তবে এর ফলে প্রতিটি উত্স ফাইলের মধ্যে শিরোনামের ফাইলটি ভেরিয়েবলের নিজস্ব ব্যক্তিগত অনুলিপিতে অন্তর্ভুক্ত ছিল, যা সম্ভবত উদ্দেশ্য নয়" " - স্ট্যাটিক ইনিশিয়ালাইজেশন অর্ডার ফিয়াসোর কারণে প্রতিটি অনুবাদ ইউনিটে এর একটি অনুলিপি থাকতে পারে।
jww

1

কনস্ট্রাক্ট ভেরিয়েবলগুলি সি ++ এ ডিফল্ট স্ট্যাটিক হয় তবে এক্সটার্নাল সি। সুতরাং আপনি যদি সি ++ ব্যবহার করেন তবে এটি কোন নির্মাণ ব্যবহার করবেন তা কোনও ধারণা নেই।

(7.11.6 সি ++ 2003, এবং এপেক্সেন্ডিক্স সিতে নমুনা রয়েছে)

সি এবং সি ++ প্রোগ্রাম হিসাবে সংকলন / লিঙ্ক উত্স তুলনা উদাহরণ:

bruziuz:~/test$ cat a.c
const int b = 22;
int main(){return 0;}
bruziuz:~/test$ cat b.c
const int b=2;
bruziuz:~/test$ gcc -x c -std=c89 a.c b.c
/tmp/ccSKKIRZ.o:(.rodata+0x0): multiple definition of `b'
/tmp/ccDSd0V3.o:(.rodata+0x0): first defined here
collect2: error: ld returned 1 exit status
bruziuz:~/test$ gcc -x c++ -std=c++03 a.c b.c 
bruziuz:~/test$ 
bruziuz:~/test$ gcc --version | head -n1
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609

সেখানে হয় এখনো সহ ইন্দ্রিয় static। এটি প্রোগ্রামার কী করছে তার অভিপ্রায় / সচেতনতার সংকেত দেয় এবং অন্যান্য ধরণের ঘোষণার (এবং, ফিউইউইউ, সি) সাথে সমতা বজায় রাখে যা অন্তর্নিহিতটির অভাব থাকে static। এটি অন্তর্নিহিত ক্রিয়াকলাপগুলির ঘোষণায় অন্তর্ভুক্ত virtualএবং overrideশেষের মতো - প্রয়োজনীয় নয়, তবে অনেক বেশি স্ব-ডকুমেন্টিং এবং স্থিতিক বিশ্লেষণের পক্ষে উপযুক্ত কারণগুলির ক্ষেত্রে।
আন্ডারস্কোর_ডি

আমি অস্পষ্টভাবে রাজি। উদাহরণস্বরূপ, বাস্তব জীবনে আমি সর্বদা এটি স্পষ্টভাবে লিখি।
বুড়িউজ

"সুতরাং আপনি যদি সি ++ ব্যবহার করেন তবে কোনও নির্মাণ কী ব্যবহার করবেন তা এই কোনও বোধগম্য নয় ..." - হুম ... আমি সবেমাত্র এমন একটি প্রকল্প সঙ্কলন করেছি যা constকেবলমাত্র একটি শিরোনামের সাথে একটি চলকটিতে ব্যবহৃত হয়েছিল g++ (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2)। এটি প্রায় 150 গুণিত সংজ্ঞায়িত প্রতীক (প্রতিটি অনুবাদ ইউনিটের জন্য একটি শিরোনাম অন্তর্ভুক্ত করা হয়েছিল) এর ফলস্বরূপ। আমি মনে করি আমরা পারেন দরকার static, inlineএকটি বেনামী / নামহীন নামস্থান বহিরাগত দুটো ঘটনার এড়াতে বা।
jww

আমি জিবিসি -5.4 সহ const intনেমস্পেসের স্কোপের ভিতরে এবং বিশ্বব্যাপী নেমস্পেসের সাথে শিশুর উদাহরণ চেষ্টা করেছি । এবং এটা কোনো কারণে সংকলিত হওয়ার নিয়ম অনুসরণ "const ঘোষিত বস্তু এবং স্পষ্টভাবে extern ঘোষণা করা অভ্যন্তরীণ দুটো ঘটনার আছে।" ".... হয়তো প্রকল্পে এই হেডার সি কম্পাইল উত্স, অন্তর্ভুক্ত যেখানে নিয়ম সম্পূর্ণ ভিন্ন।
bruziuz

@jww আমি সিটির জন্য লিংকেজ ইস্যু এবং সি ++ এর জন্য কোনও ইস্যু নিয়ে উদাহরণ আপলোড করেছি
বুড়িউজ

0

স্ট্যাটিক অন্য সংকলন ইউনিটটিকে সেই পরিবর্তনশীলটি বহিরাগত করা থেকে বাধা দেয় যাতে সংকলকটি যেখানে ব্যবহার করা হয় সেখানে ভেরিয়েবলের মানটি কেবল "ইনলাইন" করতে পারে এবং এর জন্য মেমরি স্টোরেজ তৈরি করতে পারে না।

আপনার দ্বিতীয় উদাহরণে, সংকলকটি ধরে নিতে পারে না যে অন্য কোনও উত্স ফাইলটি এটি বহিরাগত করবে না, সুতরাং এটি অবশ্যই সেই মানটি অবশ্যই কোথাও মেমরিতে সঞ্চয় করতে পারে।


-2

স্ট্যাটিক সংকলককে একাধিক উদাহরণ যুক্ত হতে বাধা দেয়। এটি # আইডিফ সুরক্ষার সাথে কম গুরুত্বপূর্ণ হয়ে উঠেছে, তবে ধরে নেওয়া শিরোনামটি দুটি পৃথক গ্রন্থাগারে অন্তর্ভুক্ত করা হয়েছে এবং অ্যাপ্লিকেশনটি লিঙ্কযুক্ত রয়েছে, দুটি উদাহরণ অন্তর্ভুক্ত করা হবে।


অভিমানী যে, "লাইব্রেরি" আপনি কি এটা বোঝাতে দ্বারা অনুবাদ ইউনিট , তাহলে তার অন্তর্ভুক্ত-রক্ষীদের, একাধিক সংজ্ঞা প্রতিরোধ একেবারে কিছুই কি হিসাবে তারা শুধুমাত্র পুনরাবৃত্তি ইনক্লুশান তাড়ান এইজন্য মধ্যে একই অনুবাদ ইউনিট । সুতরাং, তারা static"কম গুরুত্বপূর্ণ" করার জন্য যা কিছু করেন না । এবং উভয়ই দিয়েও আপনি একাধিক অভ্যন্তরীণ সংযুক্ত সংজ্ঞা দিয়ে শেষ করতে পারেন, যা সম্ভবত উদ্দেশ্য নয়।
আন্ডারস্কোর_ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.