"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يعمل `printf` بدون `std::` في C++ عندما يتم تضمين `cstdio`؟

لماذا يعمل `printf` بدون `std::` في C++ عندما يتم تضمين `cstdio`؟

تم النشر بتاريخ 2024-11-17
تصفح:796

 Why Does `printf` Work Without `std::` in C   When `cstdio` is Included?

cstdio stdio.h Namespace

ينص مرجع C لـ cstdio على أن "كل عنصر في المكتبة يتم تعريفه ضمن مساحة الاسم std." ومع ذلك، فقد وجدت أن كلا من std::printf وprintf يعملان، مما يثير تساؤلًا حول ما إذا كانت رؤوس C تتضمن رموزًا في كلا مساحة الاسم.

الإجابة أكثر دقة.

بما في ذلك cstdio

يؤدي تضمين cstdio إلى استيراد الرموز إلى مساحة الاسم القياسية وربما إلى مساحة الاسم العامة. وذلك لأن cstdio يتضمن stdio.h، وهو رأس على النمط C.

بما في ذلك stdio.h

بما في ذلك stdio.h يستورد الرموز إلى مساحة الاسم العالمية و ربما في مساحة الاسم std. وذلك لأن stdio.h عبارة عن رأس على النمط C.

ميزات التوافق

يعد استخدام رؤوس النمط C في لغة C إحدى ميزات التوافق. يحدد معيار C 11 أنه من أجل التوافق مع مكتبة C القياسية، توفر مكتبة C القياسية 25 رأسًا للغة C، بما في ذلك cstdio وstdio.h.

وينص المعيار أيضًا على أن كل رأس C "يتصرف كما لو كان كل اسم تم وضعها في مساحة اسم المكتبة القياسية بواسطة رأس cname المقابل، ويتم وضعها ضمن نطاق مساحة الاسم العامة. ، يمكن استيراد الرموز إلى كل من مساحات الأسماء القياسية والعالمية، اعتمادًا على الرؤوس المحددة المستخدمة وتنفيذ المترجم. ومع ذلك، ليس من المضمون دائمًا أن تحتوي مساحة الاسمين على نفس الرموز.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3