Uint32, int32, uint64, int64 এর মতো ধরণগুলি কি কোনও স্ট্যাডলিব শিরোনামে সংজ্ঞায়িত করা হয়েছে?


95

আমি প্রায়শই uint32, uint64 এর মতো প্রকারগুলি ব্যবহার করে উত্স কোডটি দেখতে পাচ্ছি এবং আমি আশ্চর্য হয়েছি যে অ্যাপ্লিকেশন কোডটিতে প্রোগ্রামার দ্বারা তাদের সংজ্ঞায়িত করা উচিত বা যদি তারা একটি স্ট্যান্ডার্ড লাইব শিরোনামে সংজ্ঞায়িত হয়।

আমার অ্যাপ্লিকেশন উত্স কোডে এই ধরণের থাকার সর্বোত্তম উপায় কী?

উত্তর:


136

সি 99 stdint.hএগুলি সংজ্ঞায়িত করে:

  • int8_t
  • int16_t
  • int32_t
  • uint8_t
  • uint16_t
  • uint32_t

এবং, যদি আর্কিটেকচার তাদের সমর্থন করে:

  • int64_t
  • uint64_t

stdint.hপাশাপাশি অন্যান্য বিভিন্ন সংখ্যক টাইপডিফ রয়েছে ।

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

uint32এবং uint64(অর্থাত ছাড়া _tপ্রত্যয়) সম্ভবত আবেদন নির্দিষ্ট।


16
এই উত্তরটি ভুল। উপরের সমস্তগুলি কেবলমাত্র তখনই উপলব্ধ হয় যদি বাস্তবায়নের ক্ষেত্রে সেই আকারের সঠিক প্রস্থের (কোনও প্যাডিং) উপস্থিত না থাকে। এমনকি যদি না, তবে, ধরনের int_leastNN_tএবং uint_leastNN_tজন্য NN8, 16, 32, এবং 64 সবসময় থাকা আবশ্যক । কমপক্ষে that৪ বিটের পূর্ণসংখ্যার ধরণের ছাড়াই সি 99 বাস্তবায়ন অনুমোদন করে না, যেহেতু long longকমপক্ষে এটি বৃহত হওয়া দরকার।
আর .. গীটহাব বন্ধ করুন ICE

@ আর ..: "C99 stdint.h" এর চেয়ে "POSIX stdint.h" বলা কি সঠিক হবে?
মিউ

4
পসিক্সের stdint.hজন্য তাদের সমস্ত প্রয়োজন।
আর .. গীটহাব বন্ধ করুন ICE

4
@ আর .., আপনি দয়া করে এই উত্তরটি সঠিকতার জন্য সম্পাদনা করতে পারেন? বর্তমান সামগ্রী এবং আপনার মন্তব্যের সংমিশ্রণটি পার্স করতে আমার কিছুটা সময় লাগল।
Merlin2011

এসডিএল তার সাথে যুক্ত typedef uint32_t Uint32;/ এসডিএল_স্টডিনক। এইচটি নাম সংজ্ঞায়িত করে (আপনি যদি এসডিএল ব্যবহারকারী হন)
Et7f3XIV

10

যারা পূর্ণসংখ্যার প্রকারগুলি সমস্তই সংজ্ঞায়িত করা হয় stdint.h


নন stdint.hবাস্তবায়ন-নির্দিষ্ট? আরো দেখুন এই প্রশ্নের এবং এই প্রশ্নের
ক্রিস ফ্রেডেরিক

4
ফাইলটি দেখে আমি মন্তব্যগুলিতে "আইএসও সি 99: 7.18 পূর্ণসংখ্যার প্রকার <stdint.h>" পেয়েছি। আমি মনে করি আপনি stdint.hযদি C99 মানকে সম্মান করছেন তবে আপনি পেয়েছেন।
ফিলিক্স

আমি তাদের কাউকেই খুঁজে পাচ্ছি না stdint.h। এই 0 হিট ফেরৎ: grep uint32 /usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdint.h | grep -v uint32_t
jww

4
@jww: আমার ক্ষেত্রে, সেই ফাইলটি রয়েছে #include "stdint-gcc.h"এবং সেই ফাইলটি গ্রেপিংয়ের মাধ্যমে সংজ্ঞা পাওয়া যায়।
ভিক্টর জামামানিয়ান

4
@jww হ্যাঁ, তাদের অস্তিত্ব নেই। _tউপরের উত্তরে তালিকাবদ্ধ হিসাবে কেবলমাত্র মানসম্পন্ন এবং এটি সংজ্ঞায়িত হওয়া উচিত should
ভিক্টর জামামানিয়ান

2

আপনি যদি C99 ব্যবহার করছেন তবে এটি অন্তর্ভুক্ত করুন stdint.h। প্রসেসর যদি তাদের সমর্থন করে তবে বিটিডাব্লু, bit৪ বিট প্রকার রয়েছে।


এই বিষয়ে কিছু উদ্ধৃত করুন।
বিজিওয়ান

6
x86 64৪-বিট গণিত সমর্থন করে না তবে এতে -৪-বিট প্রকার রয়েছে।
আর .. গীটহাব বন্ধ করুন ICE

4
হ্যাঁ এটা করে. এটি 32-বিট এক্স 32-বিট -> 64-বিট গুণ, 64-বিট / 32-বিট -> 32-বিট ভাগফল এবং 32-বিট অবশিষ্ট অংশকে সমর্থন করে, পাশাপাশি carryণ সংক্রান্ত নির্দেশাবলীর সাথে বহন এবং বিয়োগ করে। এটি 64৪-বিট পাটিগণিত সম্পাদন করতে সক্ষম হওয়ার জন্য নির্মিত হয়েছিল, কেবল যদি কারণ 8086-কে 32-বিট পাটিগণিত করতে সক্ষম হতে হয়েছিল।
মাইকেল মরিস

এখানে একটা হয় uint128_tযদি __SIZEOF_INT128__16 বা তার অধিক হিসেবে সংজ্ঞায়িত করা হয় (জিসিসি ও কম্প্যাটিবল)। এটি x86_64 / amd64 মেশিনে উপলব্ধ, তবে প্রসেসর এটিকে স্থানীয়ভাবে সমর্থন করে না। কেবল ক্রির রেজিস্টার আকার, আইআইআরসি রয়েছে।
jwww

0

প্রশ্নকর্তা আসলে (কুৎসিত) int16_t (ইত্যাদি) এর চেয়ে int16 (ইত্যাদি) সম্পর্কে জিজ্ঞাসা করেছিলেন।

কোনও স্ট্যান্ডার্ড শিরোনাম নেই - বা লিনাক্সের / usr / অন্তর্ভুক্ত / ফোল্ডারে কোনও "_t" ছাড়াই তাদের সংজ্ঞায়িত করে।

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