অসম্পূর্ণ টাইপের কোনও পয়েন্টার কি অসম্পূর্ণ হতে পারে?


9

int (*)[]একটি অসম্পূর্ণ টাইপ হতে পারে?

সি 2018 6.2.5 1 বলেছেন:

অনুবাদ ইউনিটের বিভিন্ন পয়েন্টে কোনও অবজেক্টের ধরণ অসম্পূর্ণ হতে পারে (সেই ধরণের বস্তুর আকার নির্ধারণের জন্য পর্যাপ্ত তথ্যের অভাব) বা সম্পূর্ণ (পর্যাপ্ত তথ্য থাকা) থাকতে পারে।

সুতরাং এটি মনে হয় যে কোনও প্রকারের আকারটি জানা থাকলে, টাইপটি সম্পূর্ণ। .2.২..1.২৮ উল্লেখ করে যে নির্দিষ্ট ধরণের পয়েন্টারগুলির একই আকার থাকতে হবে (পয়েন্টার voidএবং অক্ষর, সামঞ্জস্যপূর্ণ ধরণের দিকে নির্দেশক, কাঠামোর দিকে নির্দেশক এবং ইউনিয়নগুলিতে পয়েন্টার), তবে অন্য ধরণের পয়েন্টারগুলি পৃথক হতে পারে।

সি বাস্তবায়নে যেখানে সমস্ত পয়েন্টার, বা অ্যারেগুলিতে সমস্ত পয়েন্টার intএকই আকার থাকে, তারপরে আকারটি int (*)[]জানা যায়, সুতরাং এটি সম্পূর্ণ হবে। একটি বাস্তবায়নের ক্ষেত্রে, বলুন, বড় অ্যারেগুলির জন্য বিভিন্ন পয়েন্টার ব্যবহার করা হয়, আকারটি জানা যাবে না, তাই এটি অসম্পূর্ণ।

এমএম হিসাবে উল্লেখ করেছেন যে , কোনও কাঠামোতে 7. a.২.১ এ প্রতিবন্ধকতা অনুসারে একটি চূড়ান্ত নমনীয় অ্যারে সদস্য ব্যতীত অপূর্ণ প্রকারের সদস্য থাকতে হবে না This. এটি প্রস্তাব দেয় যে এক আকারের পয়েন্টার সহ একটি প্রয়োগকরণ অবশ্যই গ্রহণ করতে হবে struct { int (*p)[]; }যখন একটি বাস্তবায়ন আলাদা রয়েছে এই জাতীয় অ্যারেগুলির জন্য আকারগুলি একটি সীমাবদ্ধতা লঙ্ঘন সনাক্ত করতে হবে। (এর পরিবর্তে এর অর্থ হ'ল এই জাতীয় ঘোষণাটি কঠোরভাবে সি এর অংশ নয়)


6.2.5 (p22) সহায়তা? (বা এটি কি পরে আরও ঘোষণার মাধ্যমে অসম্পূর্ণ প্রকারটি সম্পূর্ণ করার অনুমতি দেয় আরও বিভ্রান্তি যুক্ত করে?)
ডেভিড সি র্যাঙ্কিন

@ ডেভিডসি.র্যাঙ্কিন 6.২.৫ / ২০-তে এটি এমনকি বলা হয়েছে যে পয়েন্টারগুলি সর্বদা সম্পূর্ণ ধরণের হয়
ক্রিস্টোফ

@ ল্যাঙ্গুয়েজলওয়ের: এটি কীভাবে প্রাসঙ্গিক হবে? প্রশ্নটি হ'ল "এমন কোনও এক্স আছে যা ওয়াই নয়?", না "কি এমন কোনও এক্স আছে যা ওয়াই হয়?"
এরিক পোস্টপিসিল

@ ল্যাঙ্গুয়েজলওয়ের: void *সম্পূর্ণ যা সত্য তা দেখায় যে একটি অসম্পূর্ণ প্রকারের পয়েন্টার সম্পূর্ণ হতে পারে। এটি কোনও অসম্পূর্ণ প্রকারের পয়েন্টারটি অসম্পূর্ণ হতে পারে কিনা তা দেখায় না। যদি কেউ জিজ্ঞাসা করে যে "স্তন্যপায়ী হস্তি কি হতে পারে?", "সিংহ একটি স্তন্যপায়ী প্রাণী" দেখায় যে এটি স্তন্যপায়ী প্রাণীর হাতী হতে পারে না। অসম্পূর্ণ প্রকারের নির্দেশকগুলির সেট এক্সটিতে অসম্পূর্ণ কোনও উপাদান থাকতে পারে কিনা তা প্রশ্ন জিজ্ঞাসা করে। দেখানো হচ্ছে যে অসম্পূর্ণ প্রকারের নির্দেশকগুলির সেট এক্স-তে একটি উপাদান রয়েছে যা সম্পূর্ণ অপ্রাসঙ্গিক।
এরিক পোস্টপিসিল

@ এরিকপোস্টপিসিল ওফস আমি শিরোনামটি ভুলভাবে লিখেছি "" অসম্পূর্ণ টাইপের কোনও পয়েন্টার কি সম্পূর্ণ হতে পারে ? "
ভাষা আইনজীবী

উত্তর:


3

অজানা আকারের একটি অ্যারে অসম্পূর্ণ:

অজানা আকারের একটি অ্যারে টাইপ একটি অসম্পূর্ণ প্রকার। এটি পরবর্তী ধরণের (অভ্যন্তরীণ বা বাহ্যিক সংযোগ সহ) পরে নির্দিষ্ট আকারের দ্বারা নির্দিষ্ট করে এই ধরণের শনাক্তকারীর জন্য সম্পন্ন হয়।

প্রকারটি int (*)[]যদিও অসম্পূর্ণ নয়: এটি intঅজানা আকারের অ্যারের পয়েন্টার ।
এবং একটি পয়েন্টারের একটি সুপরিচিত আকার রয়েছে:

printf ("Size %d\n", sizeof(int (*)[]));

.2.২.৫ / ২৩: প্রকারটি অসম্পূর্ণ না থাকলে এবং পরিবর্তনশীল দৈর্ঘ্যের অ্যারে প্রকার না হলে কোনও ধরণের ধ্রুব আকারের পরিচিতি রয়েছে।

এছাড়াও আপনি এটিকে অবলম্বন করতে পারেন, অ্যারে শব্দার্থবিজ্ঞানের জন্য ধন্যবাদ:

typedef int (*T)[];
...
int a[10];
for (int i=0; i<10; i++) a[i]=i;
T p=a;
for (int i=0; i<10; i++) printf ("%d ",(*p)[i]);
printf ("\n");

সম্পাদন করা

উপরন্তু, একটি পয়েন্টার সর্বদা একটি সম্পূর্ণ টাইপ। এটি 6.2.5 / 20-এ সাদা রঙের উপর কালো লেখা আছে:

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


আমি মনে করি আপনি এটি সিদ্ধ হয়ে গেছেন এবং জিসিসি সম্মত হন। কাঠামো ডাব্লু / অসম্পূর্ণ অ্যারেতে নির্দেশক মূল প্রশ্নের সাথে আলোচনার অনুরোধের অনুরূপ।
ডেভিড সি র্যাঙ্কিন

কেবলমাত্র শেষ অনুচ্ছেদটি প্রাসঙ্গিক। উদাহরণটি printfকেবলমাত্র দেখায় যে একটি অসম্পূর্ণ অ্যারেটির একটি পয়েন্টার এটি কার্যকর করা কার্যকর হয়েছিল, যা প্রশ্নের মধ্যে বলা হয়েছিল - এটি যদি শেষ অনুচ্ছেদে উদ্ধৃত 6.2.5% না হয়, এটি সংকলন করতে ব্যর্থ হতে পারে। 6.2.5 23 এছাড়াও প্রাসঙ্গিক নয়; এটি আমাদের সম্পূর্ণ আকারে আকারটি জানা এবং ধ্রুবক বলে দেয় এবং আমরা ইতিমধ্যে জানি যে সম্পূর্ণ হওয়ার অর্থ মাপটি জানা।
এরিক পোস্টপিসিল

6.2.5 20 আকর্ষণীয়। আমি অনুমান করি যে এটি এই পরিণতিটি করার উদ্দেশ্যে নয়, তবে এর অর্থ এই যে সমস্ত পয়েন্টার অসম্পূর্ণ যখন একই ধরণের থাকে তখন সম্পূর্ণ আকারগুলির অবশ্যই একই আকার থাকতে হবে। উদাহরণস্বরূপ, অ্যারেগুলিতে সমস্ত পয়েন্টারগুলির intঅবশ্যই একে অপরের সমান আকার structথাকতে হবে এবং একটি নির্দিষ্ট অ্যারেগুলিতে সমস্ত পয়েন্টারগুলির অবশ্যই একে অপরের সমান আকার থাকতে হবে, যদিও বিভিন্ন ধরণের অ্যারেগুলিতে সমস্ত পয়েন্টার structএকই আকারের নয় একে অপরের মতো
এরিক পোস্টপিসিল

1
@ এরিকপোস্টপিসিল সম্ভবত পাঠ্য "একইভাবে, সামঞ্জস্যপূর্ণ প্রকারের যোগ্য বা অযোগ্য সংস্করণের দিকে নির্দেশকগুলির একই প্রতিনিধিত্ব এবং প্রান্তিককরণের প্রয়োজনীয়তা থাকতে হবে।" বলতে চাই যে ব্যাখ্যা করা উচিত T(*)[]হিসাবে একই আকার থাকতে হবে T(*)[5]যেহেতু তারা সামঞ্জস্যপূর্ণ ধরনের হয়, এবং আমরা যোগ করতে অথবা কোয়ালিফায়ার দূর করতে পারবে?
এম এম

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