সি এর অকার্যকর টাইপ খালি / নীচের প্রকারের সাথে সাদৃশ্যপূর্ণ নয় কেন?


28

উইকিপিডিয়া পাশাপাশি অন্যান্য উত্সগুলি যে আমি voidখালি টাইপের বিপরীতে ইউনিট প্রকার হিসাবে তালিকাবদ্ধ সি এর ধরণটি পেয়েছি । আমার মনে হচ্ছে এটি একটি বিভ্রান্তিকর হিসাবে মনে হয় যে voidখালি / নীচের ধরণের সংজ্ঞাটি আরও ভাল ফিট করে।

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

voidখালি ধরণের হওয়ার যুক্তি হিসাবে শেষ পয়েন্টটির কোনও যোগ্যতা আছে কিনা তা আমি নিশ্চিত নই , যেমন void*খুব বেশি সংখ্যার সাথে সম্পর্কিত নয় এমন একটি বিশেষ ক্ষেত্রে কমবেশি রয়েছে void

অন্যদিকে, voidনিজেই অন্য সমস্ত ধরণের একটি উপপ্রকার নয়, যা আমি যতদূর বলতে পারি যে কোনও ধরণের নীচের ধরণের হতে হবে।


10
"কোনও কিছু ফেরত দেয় না" এর অর্থ আপনার প্রকৃত অর্থ "আগ্রহের কিছু ফেরত দেয় না", তবে খালি আউটপুট সহ কোনও ফাংশন মোটেও ফিরে আসে না (অর্থাত ক্রাশ বা লুপ অসীমভাবে)।
ট্যুরিওন

2
রিটার্ন টাইপ হিসাবে, অকার্যকর একটি ইউনিট টাইপ।
ব্যবহারকারী 253751

উত্তর:


38

সি তে, voidএকাধিক সম্পর্কহীন জিনিসের জন্য ব্যবহৃত হয়। এটি কীসের জন্য ব্যবহার করা হয়েছে তার উপর নির্ভর করে এর অর্থ হতে পারে ইউনিট টাইপ, খালি টাইপ বা অন্য কিছু।

যখন voidনিজেই এটি ব্যবহার করা হয় (বিপরীতে void*, শূন্যের দিকে নির্দেশক), এটি একটি ইউনিটের ধরণ, অর্থাত্ একটি প্রকারের একক মান। যে ক্রিয়াকলাপগুলি ফিরে আসে voidতাকে "কিছুই ফিরিয়ে না" বলা হয়, তবে এর প্রকৃত অর্থ হ'ল তারা কোনও তথ্য ফেরত দেয় না। তারা তথ্যের বিট ফেরত দেয় যার অর্থ তারা স্বতন্ত্র মান, অর্থাত্ একটি ইউনিটের প্রকার ধারণ করে এমন ধরণের একটি মান ফেরত দেয় ।2 0 = 1020=1

এটি কোনও খালি প্রকার নয়: কোনও ফাংশন যা খালি প্রকারটি দেয় তা কোনও মান ফেরত দিতে পারে না, কারণ এই ধরণের কোনও মূল্য নেই। কোনও ফাংশন যার রিটার্নের ধরণ খালি তা কেবল চিরকালের জন্য লুপ করতে পারে, বা প্রোগ্রামটি বাতিল করতে পারে, বা একটি ব্যতিক্রম বাড়াতে পারে ( longjmp) অন্যথায় ফিরে আসার ব্যবস্থা না করে, যেমন স্ট্যান্ডার্ড সি এর বাইরে কার্যকারিতা ব্যবহার করে অন্য থ্রেডে নিয়ন্ত্রণ স্থানান্তর করে)। বিভ্রান্তিকর জিনিসগুলি রাখতে, voidখালি টাইপের পরিবর্তে সি তে প্রচলিত (সি এর খালি টাইপ নেই)।

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

কোনও সম্ভাব্য প্রকারকে মঞ্জুরি দেওয়ার অর্থে সি এর নীচের ধরণ নেই। এমনকি অসম্পূর্ণ প্রকারগুলিও এর মানগুলির সাধারণ প্রকৃতি উল্লেখ করে, যেমন পয়েন্টার বা স্ট্রাক্ট বা ইউনিয়ন বা কার্যাদি। তবে void*কোনও নন-ফাংশন টাইপের পয়েন্টার: এটি অবজেক্ট পয়েন্টার টাইপের বীজগণিতের ন্যূনতম উপাদান, অর্থাৎ এটি নীচের অবজেক্ট পয়েন্টার টাইপ। সাধারণ ক্ষেত্রে ভিন্ন T*যেখানে Tকিছু অ অকার্যকর টাইপ, void*টাইপ একটি মান পয়েন্টার ধরণ নয় void, কিন্তু অনির্দিষ্ট ধরনের একটি মান পয়েন্টার ধরণ।


যে কেউ সি ++ এবং সি 98 এ বাতিল করে দিতে পারে return stackoverflow.com/questions/35987493/...
BartekChom

2
চতুর্থ অনুচ্ছেদটি আনুষ্ঠানিকভাবে ভুল। সি-তে, সঞ্চয়স্থানের পরিমাণ voidশূন্য নয়, অপরিজ্ঞাত। প্রকারের জিনিসগুলি voidনিষিদ্ধ করার কারণ এটি নয় । আনুষ্ঠানিক কারণ হ'ল এটি voidএকটি অসম্পূর্ণ প্রকার , এবং অবজেক্টগুলির একটি অসম্পূর্ণ প্রকার থাকতে পারে না।
এমসাল্টারস

4
@ স্যামলটার্স না, আমি যা লিখেছি তা আনুষ্ঠানিকভাবে সঠিক is "কারণ" বলতে ভাষার নকশার অনুপ্রেরণাকে বোঝায়, ভাষার নির্দিষ্টকরণের অভ্যন্তরীণ যৌক্তিক সূত্রগুলিতে নয়। voidটাইপ প্রয়োজন স্টোরেজ 0 বিট। এই কারণেই সি এর ডিজাইনারা voidএকটি অসম্পূর্ণ প্রকারের সিদ্ধান্ত নেওয়ার বিপরীতে, 0 বাইট স্টোরেজ (যা ভাষার নকশায় অনেক প্রভাব ফেলবে) বা স্টোরেজ 1 বাইট (যা স্থান নষ্ট করবে) গ্রহণ করে ।
গিলস 'অশুভ হওয়া বন্ধ করুন'

1
@ গিলস: দুঃখিত, তবে এটির কোনও মানে হয় না। যদি অনুমতি দেওয়া হয় তবে ব্যবহৃত স্থানটি শূন্য প্রকারের প্রতি বস্তুতে 1 বাইট হবে এবং আপনার অবশ্যই অনেক voidধরণের অবজেক্টের প্রয়োজন নেই । এই বিষয়গুলি অন্য সমস্ত অবজেক্টের উরফ করতে পারে তা উল্লেখ করার দরকার নেই, সুতরাং প্রকৃত ব্যবহার যাইহোক শূন্য হবে।
এমসাল্টারস

4
@CodesInChaos: ওয়েল, সি ++ আসলে খালি structs মধ্যে, অর্থাত্ পারবেন struct E { };। যখন বেস শ্রেণি হিসাবে ব্যবহৃত হয়, এটি শূন্য আকারের হতে পারে। (সি / সি ++ এর মতো আসলে কিছুই নেই, দুটি ভাষা তাদের নিজস্ব পছন্দ করে এবং তারা এই ক্ষেত্রগুলিতে পৃথক হতে পারে C সি স্পষ্টত খালি বেস শ্রেণি নেই, কারণ এটির প্রথম স্থানে OO নেই)
এমএসএলটারস

11

"খালি টাইপ" নামটি সম্ভবত বিভ্রান্তিকর। এর অর্থ কী, আপনি নিজেরাই যেমন বলছেন, ধরণের কোনও মান নেই । "খালি" প্রকারের কোনও পৃথক মানকে বোঝায় না, এটি পুরোপুরি প্রকারটিকে বোঝায়, সম্ভাব্য মানের একটি সেট হিসাবে বিবেচনা করে। তাই এই নেই না মত "একটি ফাংশন ফিরে কিছু বলতে voidকোন তথ্য আয়", কিন্তু "সেখানে বিদ্যমান ধরনের কোনো মূল্যই "।

এর অর্থ এমন একটি ফাংশন যার ফলাফলের ধরণটি কখনই শেষ হতে পারে না । যদি এটি সমাপ্ত হয়, যদি একটি মান ফেরত দিতে হয় , তবে, ভাল, এই জাতীয় মান বিদ্যমান নেই।

এর অর্থ এটিও, খালি প্রকারের মানটিতে কতটা তথ্য থাকবে তা নিয়ে আলোচনা করা এমনকি সম্ভব নয়, কারণ এরকম কোনও মান নেই। (অথবা যদি আপনি করেন তবে "শূন্য প্রকারের কোনও মান হ'ল প্রায় 35093658 বিট তথ্য রয়েছে" এর মত একটি অযৌক্তিক বিবৃতি শূন্যপথে সত্য)) অসীম পরিমাণে তথ্য রয়েছে বলে মানগুলি ভাবা কিছুটা কার্যকর (যদিও সত্য নয়) ।

যদিও "রিটার্ন টাইপ" সহ একটি সি ফাংশন voidপরিষ্কারভাবে ফিরে আসতে পারে তবে তার ফেরতের মূল্যে কোনও তথ্য দেয় না। ভাল, এটি হ'ল ইউনিট প্রকারের বৈশিষ্ট্য: এটির মানগুলিতে কোনও তথ্য থাকে না, কারণ এর মধ্যে একটি মাত্র মান রয়েছে (তাই ফাংশনটি কল করতে কখনও বিরক্ত না করে রিটার্নের মানটি কী হবে তা আপনি সর্বদা বলতে পারেন)।

কনর ম্যাকব্রাইডকে উদ্ধৃত করতে (সি তে প্রতিলিপি)

void"বোরিং" এর অর্থ। এর অর্থ বিরক্তিকর ধরণ যার মধ্যে একটি জিনিস রয়েছে, এছাড়াও বিরক্তিকর। বিরক্তিকর ধরণের একটি উপাদানকে অন্যের সাথে তুলনা করে লাভ করার মতো আকর্ষণীয় কিছুই নেই, কারণ বিরক্তিকর ধরণের কোনও উপাদানকে আপনার মনোযোগ দিয়ে কোনও কিছু জানার মতো কিছুই নেই।

এটি খালি টাইপের থেকে খুব আলাদা [...]। খালি টাইপটি খুব উত্তেজনাপূর্ণ, কারণ যদি কেউ আপনাকে এর সাথে সম্পর্কিত কোনও মূল্য দেয় তবে আপনি জানেন যে আপনি ইতিমধ্যে মরে গেছেন এবং স্বর্গে এবং আপনি যা চান তা আপনার।


মজাদার; যদি of এর সংজ্ঞাটি এমন ফাংশন হয় যার রিটার্ন টাইপ ⊥ কখনই শেষ করতে না পারে তবে সি এর মধ্যে এ জাতীয় টাইপ রয়েছে। আমরা একে উদ্বায়ী শূন্য বলি।
জোশুয়া

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.