سؤال

هذا يبدو وكأنه سؤال بسيط, ولكن أنا لا يمكن العثور عليه مع تجاوز سعة مكدس البحث جوجل.ما نوع تليها _t يعني هذا ؟ مثل

int_t anInt;

أرى الكثير في التعليمات البرمجية C يعني التعامل بشكل وثيق مع الأجهزة—أنا لا يمكن أن تساعد ولكن أعتقد أنهم ذات الصلة.

هل كانت مفيدة؟

المحلول

كما دوغلاس مايل أنه في الأساس يدل على اسم نوع.وبالتالي سيكون من غير نصح نهاية متغير أو دالة أسماء مع '_t'لأنه يمكن أن يسبب بعض الارتباك.وكذلك size_t, ، C89 معيار يحدد wchar_t, off_t, ptrdiff_t, وربما بعض الآخرين لقد نسيت.على C99 معيار يحدد الكثير من أنواع إضافية ، مثل uintptr_t, intmax_t, int8_t, uint_least16_t, uint_fast32_t, وهكذا.هذه هي أنواع محددة رسميا في <stdint.h> ولكن في معظم الأحيان سوف تستخدم <inttypes.h> والتي (على غير العادة القياسية ج رؤوس) يشمل <stdint.h>.فإنه (<inttypes.h>) يعرف أيضا وحدات الماكرو مع printf() و scanf().

كما مات كورتيس لاحظ لا يوجد أهمية مترجم في اللاحقة;بل هو الإنسان المنحى الاتفاقية.

ومع ذلك ، يجب أن نلاحظ أيضا أن POSIX يعرف الكثير من اضافية من نوع الأسماء المنتهية في_tاحتياطيات لاحقة من أجل تنفيذ.هذا يعني أنه إذا كنت تعمل على POSIX النظم ذات الصلة ، وتحديد نوع الخاصة بك مع أسماء الاتفاقية غير حكيمة.النظام الذي عمل على فعل ذلك (لأكثر من 20 عاما) ؛ نحن بانتظام الحصول على تعثرت أنظمة تحديد أنواع مع نفس الاسم مثل نحدد.

نصائح أخرى

وانها اتفاقية المستخدمة في تسمية أنواع البيانات، منها مثلا مع typedef:


typedef struct {
  char* model;
  int year;
...
} car_t;

على _t عادة ما يلتف كامد نوع التعريف.

دول مجلس التعاون الخليجي مجرد إضافة الأسماء التي تنتهي _t إلى حجز مساحة لا يجوز لك استخدام لتجنب النزاعات مع الإصدارات المستقبلية من مستوى C و POSIX (GNU C دليل المكتبة).بعد بعض البحث وجدت أخيرا المرجع الصحيح داخل POSIX القياسية (1003.1 ، المنطقي (بالمعلومات)):

B. 2.12 أنواع البيانات

شرط أن أنواع إضافية محددة في هذا القسم في نهاية "_t" كانت المطالبة من قبل مشكلة اسم تلوث الفضاء.فإنه من الصعب تحديد النوع (حيث هذا النوع ليست واحدة المحددة من قبل IEEE الأمراض المنقولة جنسيا 1003.1-2001) في رأس الملف واستخدامه في آخر دون إضافة الرموز إلى مساحة اسم البرنامج.للسماح منفذي لتوفير الخاصة بهم ، مطابقة التطبيقات اللازمة لتجنب رموز تنتهي في "_t" ، مما يسمح منفذة إلى تقديم أنواع إضافية.لأن رئيسيا استخدام أنواع في تعريف هيكل أعضاء ، والتي يمكن (في كثير من الحالات يجب) أن تضاف إلى هياكل محددة في IEEE الأمراض المنقولة جنسيا 1003.1-2001 ، والحاجة إلى أنواع إضافية مقنعة.

باختصار ، فإن معيار يقول أن هناك فرص جيدة لتوسيع أنواع قياسية قائمة ، وبالتالي فإن معيار يقيد _t مساحة للاستخدام الخاص به.

على سبيل املثال ، برنامج المباريات POSIX 1003.1 القضايا 6 و يمكنك تعريف نوع foo_t. POSIX 1003.1 المسائل 7 هو في نهاية المطاف صدر مع تحديد نوع foo_t.البرنامج لا تتطابق مع الإصدار الجديد ، الذي قد يكون مشكلة.تقييد _t الاستخدام يمنع من إعادة بيع ديون رمز.وهكذا, إذا كنت تهدف إلى POSIX التوافق ، يجب تجنب بالتأكيد _t كمعيار الدول.

ملاحظة جانبية:شخصيا أحاول التمسك POSIX لأنني أعتقد أنه يعطي جيدة أساسيات البرمجة نظيفة.علاوة على ذلك, أنا مولعا جدا من لينكس أسلوب الترميز (الفصل 5) المبادئ التوجيهية.هناك بعض الأسباب الوجيهة لماذا لا تستخدم الرموز المميزة ل typedef.نأمل أن يكون هذا مساعدة!

وبل هو اصطلاح تسمية موحدة لأنواع البيانات، الذي يعرف عادة typedefs. وهناك الكثير من التعليمات البرمجية C الذي يتعامل مع سجلات الأجهزة يستخدم C99 محددة الأسماء القياسية لأنواع البيانات ذات حجم ثابت الموقعة وغير الموقعة. كاتفاقية، هذه الأسماء في ملف رأس القياسية (stdint.h)، وتنتهي مع _T.

وو_t ليس لديها أصلا أي معنى خاص. لكنها سقطت في الاستعمال الشائع لإضافة لاحقة _t لفي typedef و.

وقد تكون أكثر دراية الممارسات C مشتركة لتسمية متغير ... هذا هو مماثل لكيفية فإنه من الشائع أن العصا ا ف ب في الجزء الأمامي للمؤشر، واستخدام تسطير أمام المتغيرات العالمية (وهذا هو قليلا أقل شيوعا)، واستخدام أسماء i متغير، j، وk للمتغيرات حلقة مؤقتة.

في التعليمات البرمجية حيث كلمة الحجم والترتيب مهم، فإنه من الشائع جدا للاستخدام أنواع محددة مخصصة التي هي صريحة، مثل BYTE WORD (عادة 16-بت) DWORD (32-بت).

وint_t ليست جيدة جدا، لأن تعريف int يتراوح بين منصات - حتى الذين كنت تتفق مع int؟ (وعلى الرغم من هذه الأيام، معظم تطوير-PC تركز يعامل على أنه لا يزال 32 بت، الكثير من الاشياء للتنمية غير PC-علاج لكثافة العمليات إلى 16 بت).

وانها مجرد الاتفاقية والتي تعني "نوع". ذلك لا يعني شيئا خاصا لمترجم.

وهذا يعني الكتابة. size_t هو نوع الحجم.

وكانت هناك بعض التفسيرات جيدة حول هذا الموضوع. فقط لإضافة سبب آخر ل-تحديد إعادة أنواع:

في العديد من المشاريع جزءا لا يتجزأ، وإعادة تعريف جميع أنواع القول صحيح تحجيم بالنظر إلى أنواع وتحسين قابلية عبر منصات مختلفة (أي أنواع الأجهزة المجمعين).

وهناك سبب آخر سوف يكون لجعل المحمولة متاحة عبر مختلف أنظمة التشغيل ولتجنب التصادم مع أنواع الموجودة في نظام التشغيل الذي كنت دمج في التعليمات البرمجية. لهذا، عادة ما يتم إضافة فريدة (ممكن) البادئة.

مثال:

typedef unsigned long dc_uint32_t;
int_t

إذا كنت تتعامل مع رمز واجهة الجهاز، ومؤلف كتاب شفرة كنت تبحث في قد حددت أن يكون حجم عدد صحيح محدد. مستوى C لا تعيين حجم معين لنوع int (ان ذلك يعتمد على هاتفك مترجم والهدف منصة، ويحتمل)، وباستخدام نوع محدد من شأنه أن int_t تجنب هذه المشكلة قابلية.

وهذا هو الاعتبار أهمية خاصة لرمز واجهة الجهاز، والتي قد تكون السبب في أنك قد لاحظت لأول مرة اصطلاح هناك.

وعلى سبيل المثال في C99، /usr/include/stdint.h:

typedef unsigned char           uint8_t;
typedef unsigned short int      uint16_t;
#ifndef __uint32_t_defined
typedef unsigned int            uint32_t;
# define __uint32_t_defined
#endif
#if __WORDSIZE == 64
typedef unsigned long int       uint64_t;
#else
__extension__
typedef unsigned long long int  uint64_t;
#endif

و_t دائما يعني يحددها typedef و.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top