الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

المكتبة مع h أو بدونها

بدأه yahya91 في 11 يوليو 2010 · 12 رد · 1,118 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أريد فقط أن أعرف هل المكتبات التي لا نضع لها لاحقة h و نستدعيها عبر std namespace نعني بذلك أننا نستخدم الـstandard library

وعندما نستخدم المكتبة بلاحقة h يعني أننا نستخدم الـstandard runtime library

لأنه قرأت في موقع learncpp كلام مفاده أن عندما خضعت لغة السي بلس بلس إلى معاير ANSI و الذي هو:

American National Standards Institute

واجهتهم مشكلة في نقل الدوال من مكتبة الـruntime إلى std namespace و هذه المشكلة هي عدم صلاحية البرامج القديمة التي تعمل بلاحقة h. و لذلك جعلوا لبعض

المكتبات نسختين: نسخة مع h. و نسخة بدونها نصل إليها من خلال الـstd namespace

لذلك ألخص سؤالي في :

* هل المكتبة بلاحقة الـh موجودة في مكتبة الـruntime

* و المكتبة دون اللاحقة موجودة فيـstandard library

* و هل std namespace المقصود بها c++ standard library و هل namespace تعني مكتبة أم ماذا؟

اعتذر على الإطلالة و شكراً جزيلا لكم و عوضكم الله الجنة

#2

السلام عليكم

اقتباس
* هل المكتبة بلاحقة الـh موجودة في مكتبة الـruntime

* و المكتبة دون اللاحقة موجودة فيـstandard library

راجع هذا الموضوع (المشاركة 5) للأخ وجدي عصام و هو مشرف سابق لقسمي الجافا و (السي/السي++) و هو أحد الخبراء المعتمدين في الفريق العربي للبرمجة.

الفرق بين iostream.h و iostream

بعض قراءة الموضوع وجدت بعض الأسئلة التي لم أعرف لها جوابا و أريد مساعدتكم:

1-هل c++ standard library هي iostream أم ماذا ؟

قال الأخ وجدي في الموضوع ما يلي:

أولا:

اقتباس
المشكله الأولى كانت أن أسماء المكتبات القياسيه في لغه السي ++ باللإضافه التي تزودنا بها بعض المترجمات تكون بصيغ غير موحده مثلا بعضها بنتهي بـ .h ، وبعضها ينتهي بـ .hpp

ما فهمت :blush: أرجو التوضيح أكثر.

ثانيا:

اقتباس
المقياس الجديد حل المشكله الأولى بأنه يتم حذف جميع الأمتدادات من المكتبات القياسيه وجعلها من غير أمتداد

هل يوجد ملف بدون امتداد ؟

ألا يجب علينا استخدام الإمتداد من أجل أن يتعرف الكومبيوتر على نمط الملف .. فإذا كان الإمتداد avi فالملف يجب أن يكون فيديو إذا كان الإمتداد bmp فيجب أن يكون الملف صورة و هكذا ...!

بالنسبة لسؤال الأخ يحي:

اقتباس
و هل std namespace المقصود بها c++ standard library و هل namespace تعني مكتبة أم ماذا؟

حسب ما قرأت في كتاب الكافي للأخ أحمد المتألق فإن:

ما معنى العبارة السابقة:

using namespace std

في العبارة السابقة استخدمنا مساحة الأسماء الخاصة بالمكتبة الرئيسية للغة السي++ و التي تدعى Standard Library و أغلبها يندرج تحت مجال الأسماء std كمـا أن مجالات الأسماء من الأشياء التي توجد في السي++ و لا توجد في السي.

عندما نريد إنشاء مساحة أسماء جديدة فهذا يعني أننا سنجمع مجموعة من المتغـيرات و الثوابت و الدوال و الكائنات في مجال واحد و الذي هو مساحة الأسماء ,انظر الـكود الآتي:

namespace 3asfh
{
char ch;
long n,m;
float x,y;
}

في هذا المثال قمنا بالإعلان عن مساحة أسماء تحت اسم 3asfh و تحتوي على مجموعة من المتغيرات, لكن السؤال الآن:كيف يمكننا أن نصل إلى هذه المتغيرات !؟

الجواب:يتم ذلك عن طريق معامل تحديد المدى :: , فمثلا :

عندما نريد الوصول إلى المتغير الحرفي ch فإننا نكتب:

3asfh::ch;

طيب الآن لو أردنا استخدام أحد المتغيرات (الموجودة داخل مساحة الأسماء) في جميع أجزاء البرنامج .. ماذا نفعل !؟

يتم ذلك باستخدام الكلمة المحجوزة using مع اسم مساحة الأسماء إضافة إلى معامل المدى وصولا إلى المتغير الذي نريد التعامل معه, هكذا:

using 3asfh::ch;

و تأتي فائدة الكلمة using في استمرار استخدام هذا المتغير طوال تنفيذ البرنامج بحيث تغنينا عن تكرار العبارة

3asfh::ch;

كلما أردنا تنفيذ البرنامج.

الآن سنرجع إلى مساحة الأسماء std و التي يوجد بها أغلب الدوال والكائنات الموجودة داخل المكتبة الرئيسية للغة السي++ فنحن عندما نكتب السطر:

using namespace std

فهذا معناه أننا نأمر الكومبايلر باستخدام جميع الدوال و الكائنات (اذا اقتضت الضرورة) داخل مساحة الأسماء std و بما أن المكتبة iostream تقع ضمن هذه المساحة فإنه يجب علينا استخدام العبارة السابقة لتضمين جميع الكائنات و الدوال الموجودة داخلها.

سؤال آخر:

ما هي runtime library ؟

انتظر الإفادة من خبراء هذا القسم :)

تحياتي.

تم تعديل هذه المشاركة بواسطة khaled_prg في 11 يوليو 2010 في 21:40

1
#3
اقتباس
سؤال آخر:

ما هي runtime library ؟

حسب ما قرأت أخي خالد هي تحوي غالباً دوال للإدخال و الإخراج و تنظيم أمر الذاكرة و أمور أخرى و كما قلت في المشاركة الأخرى أن لغات البرمجة ليس بالضرورة أنت تعتمد على

runtime library لأنه مثلاً لغة السي بلس بلس تستخدم مكتباتها c++ standard library و أيضاً كما فهمت أيضاً أن استخدام الـnamespace يضيف قوة للغة  لأنك لم تعد محكوماً بالكلمات المحجوزة في namespace std . و لكن كل هذا الكلام لا معنى له مالم نعرف هل

namespace std==c++standard library

اقتباس
هل يوجد ملف بدون امتداد ؟

كما قرأت في كتاب learncpp.com أن المسألة ليس بدون امتداد المسألة هي استخدام iostream من خلال namespace std أو استخدامها من خلال الـruntime library

و لكن أضم صوتي إلي كل أسئلتك المهمة التي هي التي ستفصل لنا الأمور

شكراً لك أخي خالد.

#4
اقتباس
و هل namespace تعني مكتبة أم ماذا

اهلاً أخي :lol:

2

البرمجة = الرياضيات

#5

بالمناسبة هناك مقالين في غاية الأهمية في الوكيبيديا

الأول عن الـrutimelibrary

http://en.wikipedia.org/wiki/Runtime_library

و الثاني عن c++ standardlibrary

http://en.wikipedia.org/wiki/C%2B%2B_Standard_Library

اقتباس
و هل namespace تعني مكتبة أم ماذا

اهلاً أخي :lol:

أنا لأقصد أن الـnamespace مكتبة حرفياً و لكن هل

namespace std==c++standard library

تم تعديل هذه المشاركة بواسطة yahya91 في 11 يوليو 2010 في 23:05

#6

السلام عليكم

اقتباس
حسب ما قرأت أخي خالد هي تحوي غالباً دوال للإدخال و الإخراج و تنظيم أمر الذاكرة و أمور أخرى

و لكن هل هي مكتبة موجودة ضمن مكتبات السي++ ؟ وما اسمها؟و هل يمكننا تضمينها؟

اقتباس

و هل namespace تعني مكتبة أم ماذا

اقتباس
اهلاً أخي :lol:

الأخ namespace يعرف جيدا namespace :P , لذلك نريد التفصيل :)

اقتباس
بالمناسبة هناك مقالين في غاية الأهمية في الوكيبيديا

الأول عن الـrutimelibrary

http://en.wikipedia....Runtime_library

و الثاني عن c++ standardlibrary

http://en.wikipedia....tandard_Library

ممكن تترجم خلاصة الصفحة باللغة العربية (لو سمحت) عشان نستفيد أكثر :)

اقتباس
و لكن أضم صوتي إلي كل أسئلتك المهمة التي هي التي ستفصل لنا الأمور

بانتظار التوضيح من طرف إخوتنا الخبراء :)

تحياتي.

تم تعديل هذه المشاركة بواسطة khaled_prg في 12 يوليو 2010 في 12:40

#8
yahya91 كتب:

الـnamespace

يا إخواني أنتم تريدون شيأً قبل أوانه ، من يعرف فيكم Object Oriented Programming فبدون شك يعرف ما هو مصطلح الـ namespace بل أجزم ذالك.

الـ namespace هو فضاء أسماء يجمع CLASS أو CLASSES أو STRUCT أو ENUM و يمكنه أن يحتوي على فضاءات أسماء أخرى ليشكل بذالك مكتبة من الClasses لاستعمالها مرة أو مرات أخرى، و لا يكاد يوجد ملف DLL و لا يحتوي على فضاء أسماء ليحتوي بدوره على المهام المرجوة من هذه المكتبة ، لن نذهب بعيداً أنضروا فقط إلى إطار العمل .NET Framwork كل مهام أو كل مكتباته تحتوى داخل فضاء الأسماء System ليحتوي أيضاً على فضاءات أسماء أحرى مثل Data , Collection , Diagnostic , IO ...

هذا يعني أن الـ namespace يساعد في تنظيم العمل ، بل يقوم بـتنظيم مكتبات أنظر المثال:

namespace test
{

//struct
	public struct MyStruct
	{
		//variables and method
	};
//enum
	enum MyEnum
	{
		var1,
		var2,
		var3
	};

//class 

	class MyClass1
	{
		//variables and methodes
	};

	class MyClass
	{
		//variables and methodes
	};
};

وعند الاستعمال يكفي ذكر

using test;

كما نفعل مع مكتبات c

أو الإسنعمال المباشر هكذا

test::MyClass1

و الله أعلم

تم تعديل هذه المشاركة بواسطة ofnet في 14 يوليو 2010 في 00:02

لا خيــــــــــر في كاتــــــــــم العلــــــــــم

سأل الممكن المستحيل ، قال أين تسكن ، فال أسكن في عقول العاجزين

#9

السلام عليكم

أخي الكريم .. أرى أنك لم تنتبه جيدا للأسئلة المطروحة لأن مشاركتك لا تحتوي على جديد (و اسمح لي على التعبير :blush: )

بإمكانك الرجوع إلى الكلام الذي نقلتُه عن الأخ أحمد المتألق لكي تعرف أن ما ذكرتَه ما هو إلا معلومات مكررة و لا تُفيد الأعضاء لأنه سبق و ان رأوها ..

نحن نريد من يجيب على الأسئلة بصفة مبسطة و يكون الشرح للمبتدئين أمثالنا.

بانتظاركم يا أخوة :)

#10

namespace

اقتباس
هو فضاء أسماء يجمع CLASS أو CLASSES أو STRUCT أو ENUM و يمكنه أن يحتوي على فضاءات أسماء أخرى ليشكل بذالك مكتبة من الClasses لاستعمالها مرة أو مرات أخرى، و لا يكاد يوجد ملف DLL و لا يحتوي على فضاء أسماء ليحتوي بدوره على المهام المرجوة من هذه المكتبة

طيب لدي سؤال لكي أفهم مادام أن المعهد الأمريكي للمعايير نقل المكتبات من مكتبة الـstandard runtime library إلى الـnamespace و أزالوا اللاحقة h. فإذاً إين يتأتي دور الـstandard c++library و ما هو الفرق بينها و بين فضاء الأسماء من حيث آلية العمل ....شكراً جزيلاً على مشاركتك و لكن أرجو أخي ofnet أن ترجع للأسئلة المظروحة من قبلي و من خبل الأخ خالد للإجابة عنها جزاك الله خيراً .

تم تعديل هذه المشاركة بواسطة yahya91 في 14 يوليو 2010 في 10:24

#11

السلام عليكم ...

الموضوع ببساطة, أنه لم يكن هناك "مرجع" standards للغة ++C. و كانت جميع الـ classes و الدوال و الثوابت و غيرها تأتي في المجال العام global مثل C بالضبط. هذا خلق الكثير من المشاكل, خصوصاً عندما تقوم بكتابة دالة لها نفس الإسم لماهو موجود في الـ standard library. قام مصممو ++C باعتماد الـ namespaces, و وضعوا جميع المكتبات القياسية في الـ namespace المسمى std. عملية تنظيمية لا أكثر. ثم فرضوا على جميع صناع المترجمات, بأن تكون الـ headers القياسية, بدون لواحق extensions و هذه هي كل القصة. فقط للتفريق بين الـ headers القديمة التي كان يوفرها صناع المترجمات. و بين الـ headers الجديدة بعد اعتماد الـ standards.

لاتخلط بين الـ Cpp standard library و بين الـ run-time library. الفرق أن الأولى هي مكتبة ++C, و الثانية هي مكتبة يحتاجها المترجم و ليس لها علاقة فعلياً بـ ++C و ربما تكون مكتوبة بلغة أخرى. ببساطة, الـ run-time library من اسمها, عبارة عن مكتبة تقوم مقام "الصمغ" بين البرنامج الذي تقوم بكتابته بـ ++C و بين نظام التشغيل الذي سيعمل عليه البرنامج. مثلاً, عندما تقوم بتشغيل برنامج مكتوب بـ ++C, فإن هناك كود يعمل قبل main يقوم بتجهيز بعض الأمور لبرنامجك كحجز مساحة افتراضية من الـ heap و تحديد أولوية الـ process الخاصة ببرنامجك, و تمرير command line arguments لـ main ثم ينقل التحكم لـ main. و بعد الإنتهاء من البرنامج يقوم بعمل cleaning و خلافه. المهم, هو أنك لا يجب أن تشغل بالك بالـ run-time library لأنها مكتبة مساعدة للمترجم و ليس للمبرمج. و هي تختلف باختلاف نظام التشغيل و باختلاف نسخة نظام التشغيل و نسخة المترجم. باختصار ليس لك علاقة بها كمبرمج.

تحياتي...

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 14 يوليو 2010 في 18:35

3
#12

السلام عليكم

بداية .. أشكرك على الإفادة و مازلنا ننتظر منك المزيد :)

ماذا تقصد بــ :

و كانت جميع الـ classes و الدوال و الثوابت و غيرها تأتي في المجال العالم global مثل C بالضبط.

اقتباس
هناك كود يعمل قبل main يقوم بتجهيز بعض الأمور لبرنامجك كحجز مساحة افتراضية من الـ heap و تحديد أولوية الـ process الخاصة ببرنامجك, و تمرير command line arguments لـ main ثم ينقل التحكم لـ main. و بعد الإنتهاء من البرنامج يقوم بعمل cleaning و خلافه.

هل تقصد بأن المكتبة run-time library هي من يتولى هذه المساءل !؟

أرجو منك أن تجيبني على الأسئلة التالية (لو سمحت :blush: ):

رجاء .. راجع هذا الموضوع (المشاركة 5) للأخ وجدي عصام.

الفرق بين iostream.h و iostream

بعد قراءة الموضوع وجدت بعض الأسئلة التي لم أعرف لها جوابا و أريد مساعدتك:

هل c++ standard library هي iostream أم ماذا ؟

قال الأخ وجدي في الموضوع ما يلي:

أولا:

اقتباس
المشكله الأولى كانت أن أسماء المكتبات القياسيه في لغه السي ++ باللإضافه التي تزودنا بها بعض المترجمات تكون بصيغ غير موحده مثلا بعضها بنتهي بـ .h ، وبعضها ينتهي بـ .hpp

ما فهمت :blush: أرجو التوضيح أكثر.

ثانيا:

اقتباس
المقياس الجديد حل المشكله الأولى بأنه يتم حذف جميع الأمتدادات من المكتبات القياسيه وجعلها من غير أمتداد

هل يوجد ملف بدون امتداد ؟

ألا يجب علينا استخدام الإمتداد من أجل أن يتعرف الكومبيوتر على نمط الملف .. فإذا كان الإمتداد avi فالملف يجب أن يكون فيديو إذا كان الإمتداد bmp فيجب أن يكون الملف صورة و هكذا ...!

انتظر ردك على أحر من الجمر.

تم تعديل هذه المشاركة بواسطة khaled_prg في 14 يوليو 2010 في 17:11

#13

شكراً أخي Khaled.Alshaya . أنا بالنسبة لي أجبت عن أسئلتي الدائرة في ذهني شكراً جزيلاً لك و بارك الله فيك

مواضيع مشابهة