سؤال

نعم، أعلم أن "cdecl" هو اسم اتفاقية اتصال بارزة، لذا من فضلك لا تشرح لي اصطلاحات الاتصال.ما أطرحه هو ما الذي يعنيه الاختصار (؟) "cdecl" بالفعل.أعتقد أنه اختيار تسمية سيئ، لأنه للوهلة الأولى يذكر أحد "مُعلن لغة C" (جانب نحوي فريد إلى حد ما من لغة C).في الحقيقة هناك برنامج اسمه cdecl هدفه الوحيد هو فك معلنات C.لكن بناء جملة مُعلن C ليس له أي علاقة على الإطلاق باصطلاحات الاتصال بقدر ما أستطيع أن أقول.

نسخة مبسطة:يشير "stdcall" إلى "اتفاقية الاتصال القياسية".ماذا يعني "cdecl"؟

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

المحلول

أنت تقرأ كثيرا في هذا.ويقف على اتفاقية الاتصال لتنفيذ وظائف C للاتصال ج بشكل عام (ولكن مهم بشكل خاص مع Varargs).

لا يجب أن يكون اختصارا لشيء يجمع بين "C" و "الإعلان"؛الأسماء هي مجرد أسماء، خاصة في البرمجة.تساعد المنكر، ولكن على الرغم من أن "Malloc" تعني "تخصيص الذاكرة"، إلا أن له معنى إضافي أننا نعرفه ونرفقه؛"Alloca" أيضا "يخصص الذاكرة"، على سبيل المثال.

أو أخذ "بنية" التي "تعني" بنية "، لكن" هيكل "، لكن" الهيكل "عام جدا بحد ذاته أنه بدون مما يعني أننا نعلق عن اللاوعي على" الهيكل "، فقد تضيع ميؤوس منها - كما لا يزال مبرمجون جدد يتعلمون المصطلحاتغالبا ما تضيع.

نصائح أخرى

يأتي من وظيفة C التي تم الإعلان عنها (على النقيض من وظيفة C التي لم يتم الإعلان عنها والتي كانت شائعة في K & R C).

في ذلك الوقت كان يتعايش مع اتفاقية الاتصال باسكال (في الوقت الذي قام فيه كالي بتطهير المكدس)، لذلك من المنطقي أن نسميها بعد لغة البرمجة.

href="http://www.agner.org/optimize/calling_conventions.pdf" rel="noreferrer"> كل ما قد ترغب في معرفة اتخاذ اقتران الاتصال.

إعلان ج.إعلان مقدم من/لـ C.

[يحرر]

يجب أن أعترف بصراحة أنني لا أعرف في الواقع ما إذا كان هذا هو ما يعنيه، على الرغم من أنه تم تقديمه بالفعل بواسطة/من أجل C.ولكن منذ caller يجب أن يقوم بتنظيف الذاكرة المخصصة (على عكس معظم اصطلاحات الاتصال الأخرى).يمكن أن يكون أيضًا بمثابة تذكير لعبارة "Caller Does End CLeaning" والتي أعتقد أنها في الواقع أداة مساعدة جيدة للذاكرة.:د

محدث لقد قمت بمراجعة هذا بالكامل، بعد التعليقات التي أشارت إلى مدى خطأي. cdecl يعني أن هذه الوظيفة تستخدم نفس اصطلاح الاتصال الذي C استخدام الوظائف. extern "C" يعني، بالإضافة إلى ذلك، أن اسم الوظيفة لا ينبغي أن يخضع C++ تشويه الاسم.

وأما سبب تسميته cdecl, ، لا أعرف المزيد.

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