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

هل تكتب السي++ بالصورة القياسية ؟

مغلق
بدأه Asm4all في 11 ديسمبر 2005 · 4 رد · 1,075 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ظهر لي أحد الأشخاص لا يدعم القياسية في السي++ فقط بل يتنفسها, يهواها, يفديها بحياته :D , كلما كتبت كود سي ولو سطر واحد ينتج أنه غير مطابق للمواصفات القياسية بينما يطرح هذا الشخص الكود الذي يظهر على الأقل 6 اسطر أخطاء في المترجم مقابل سطر واحد في الكود :lol: , وفي النهايه أكتشف أنه مطابق للمواصفات القياسية التي لا أعلم عنها شيء

انظر معي :

#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
int n;
cin >> n;
int array1[n][n];
return 0;
}

هل لديك اعتراض على هذا الكود ؟؟ دقق النظر في السطر السادس

ها, ماذا تقول ؟؟ هل يعمل هذا الكود ؟؟ أم انك معترض عليه لأن المترجم يحتاج قيمه محدده ليحجز على أساسها مساحة المصفوفة ؟

اذا كنت معترض (مثلي طبعا ) , مبروك أنت خطأ :D , مثلي ايضاً

طيب وما الدليل على اننا اخطأنا , تقول لي نجرب والميه تكدب الغطاس !!!

نسأل صاحبنا القياسي فيقول هات مترجم جديد , مثلا مترجم ميكروسوفت الجديد , نقوله ماشي احدث حاجه عندنا VC++ 8 في VS 2005

أظن أحدث حاجه على الإطلاق , جرب.....

1>.\Main.cpp(6) : error C2057: expected constant expression
1>.\Main.cpp(6) : error C2466: cannot allocate an array of constant size 0
1>.\Main.cpp(6) : error C2057: expected constant expression
1>.\Main.cpp(6) : error C2466: cannot allocate an array of constant size 0
1>.\Main.cpp(6) : error C2087: 'array1' : missing subscript
1>.\Main.cpp(6) : error C2133: 'array1' : unknown size

مش قلتلك غلط , هات الحلاوه وما تتكلمش معايا تاني يا عم القياسي :lol:

يرد عم القياسي يقولي لا الكود صح والمترجم هو الغلط :angry:

:blink: , انت بتقول ايه ؟ , أحدث اصدار غلط , نشوف طيب اللي قبلها , لا دي نفس النتيجه , عموما مش ميكروسوفت بس هي اللي بتعطي نفس النتيجه

قاللي ده شغال على Dev

جربت الكود عليه (لأول مره اتعامل معاه) , قبل الكود واشتغل تمام , عجيبه <_<

طيب ليه ؟ رده كان جميل جدا , المترجم ده بينصاع لـ ANSI/ISO C99

طيب تعالوا نشوف النقطه دي كمان :

int *p;
p = new int[1000];
if(p == NULL) {
  cout << "Error ...." << endl;
  return -1;
}

ها رأيك ايه في الكود ده ؟؟ على فكره انا اللي كاتبه , نصيحه توقع انه غلط :P

لسه مصر انه صح ؟؟

طيب اسمعها منه " this code has a logical problem " , ايه رأيك ؟؟

طيب تعرف ايه المشكلة ولا عرفتها من نفسك ؟؟

المشكله في اختبار اذا كان p تساوي NULL ولا لأ وبناء عليها هل اكمل البرنامج ام أخرج منه

رد الراجل ان new مش حترجع NULL في حالة الفشل ولكن سوف تمرر exception وهو bad_alloc , لهذا فإن البرنامج لن يعلم بحالة الفشل مما يؤدي الى تعطل البرنامج نفسه

طيب , انا عن نفسي مش جايب الكلام ده من بيتنا ده موجود في كل مكان

ميكروسوفت بتقول كده , الأمثله دي مش أنا اللي كاتبها

لكن على مين , ده صاحبنا قياسي وماشي زي ما المنظمه ما بتقول بالضبط

طلع ان العالم دي كلها متخلفة لأنهم شغالين على النظام القديم ومفيش تطوير ولا توافق و تنفيذ لقرارات ANSI/ISO الجديدة

أخيرا اكتشفت الحقيقة المؤلمة , الراجل طلع كلامه صح

Are you Ready For C99?

أخيرا , ودي ماتكلمتش فيها لا بابيض ولا اسود ,

void main()

تعتبر جريمة من جرائم الحرب, استعمل

int main()

خليك راجل قياسي :D

الى اللقاء مع موقف جديد مع صاحبنا القياسي

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 18 أبريل 2014 في 18:30 — السبب: add some tags

#2

هناك أيضاً بعض التفاوت بين ال Standard و ال++VC تحديداً و هي نقطة مستفزة جداً استمرت في 6 اصدارات مستمرة بدأً من VC 1 حتى VC6 و انتهت هذه المشكلة مع VC 2002 أخيرا و ما بعدها

نسيت أقول ما هي المشكلة

for(int i=0; i< NN; i++)
cout<<"Whatever"<<endl;

cout<<i<<endl;

ماهو الخطأ في هذا الكود

لو قمت بعمل Compile له على VC6 لن يون هناك أي أخطأ و سيعرض قيمة السطر الأخير NN

و لكن هذا كسر ضخم في الStandards فقد وضحت الStandards أنه لا يمكن استخدام local block variable خارج هذا الblock فكيف تستطيع تعريف الi داخل الloop ثم تجدها معرفة و بالقيمة الأخيرة خارج الloop طبعا هذا تخريف ميكروسوفتاوي ... و لكن لو أخذت هذا الكود على GCC سيعترض اعتراضاً شديداً و يكاد يأمر بحبسك على هذه الفعلة الشنعاء

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#3

عندما تستخدم اللينكس ،، ستضطر إلى استخدام القياسية وخاصة مع مترجم gcc لتوقف سيل التحذيرات المنهمرة عليك ..

#4

شوقتوني بالفعل إلى المترجمات التي تدعـم الصورة القياسيـة

هل من مترجم يعـمل على الويندوز ويترجم الصورة القياسيـة .. لا أعرف سوى منتجات مايكروسوفت وبورلاند فقط

#5

أهلا سلطان ،،

جرب هذا الكومبايل وهو ما قصده صاحب الموضوع

http://www.bloodshed.net/dev/index.html

حاول تنزيل آخر نسخة ولو كانت بيتا ﻷن اﻹصدارة الرابع قديمة واجد ....

تحياتي

هذا الموضوع مغلق.

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