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

لماذا مترجم ال gcc للغة ال c لايفهم ال references؟

بدأه mhewedy في 15 مايو 2010 · 10 رد · 840 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم:

عندي الكود التالي:

#include <stdio.h>

int main(void){

	int x = 10;
	int& x_ref = x;

	return 0;
}

عندما أحاول ان أعمل له ترجمه بواسطة الأمرين التاليين يعطي لي رسالة خطأ:

>cc prog1.c
>gcc prog1.c

و يعمل فقط إذا ترجمته بمترجم ال c++ :

g++ prog1.c

رسالة الخطا تقول أن علامة ال & يجب أن يسبقها )

و ما الفرق بين ال gcc و cc ؟

تم تعديل هذه المشاركة بواسطة {هويدي} في 15 مايو 2010 في 19:43

1
#2

الgcc مخصص للسى (ويعنى ايضاء gnu compiler collection ) و g++ جزء منة مخصص للسى++

الcc هى امر يرمز للمترجم الافتراضى على النظام (فى حالة لينكس فانة gcc )

الgcc (وليس g++ ) قادر على ترجمة ملف c++ (بعد ملاحظتة ذلك من امتداد الملف ) ولكنة غير قادر على linking

لذلك استخدم g++

2

name : mohamedyosry

#3

النقطه الاخيره ان ال references تم استحداثها فى ال Cpp

3
#5

كيف يمكن استخدام الدوال scanf او printf دون reference؟؟؟؟؟ مع العلم ان هذه الدوال تأخد reference كا parameter وهي موجوده في مكتبه السي الرئيسيه stdio.h

#6
اقتباس
كيف يمكن استخدام الدوال scanf او printf دون reference؟؟؟؟؟ مع العلم ان هذه الدوال تأخد reference كا parameter وهي موجوده في مكتبه السي الرئيسيه stdio.h

يوجد السى++ خاصية reference declaration وهية بديل ل pointer declaration

مثال

reference declaration

فى تلك الحالة ما تساوية بx_ref ياخذ قيمة عنوانة فى الذاكر الية

        int x = 10;
        int& x_ref = x;

وما يماثلة فى السى (ومتاحة ايضاء فى سى++)

فى تلك الحالة ما تساوية بx_ptr لا ياخذ قيمة عنوان الذاكر الية بل يجب اضافة address operator & وبدونها سيقوم بتخزين البيانات الاصلية للمتغير كعنوان فى الذاكرة (وبالطبع هو عنوان خاطى)

int x = 10;
int* x_ptr = &x;

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

name : mohamedyosry

#7
Ali Al-Zyoud كتب:

كيف يمكن استخدام الدوال scanf او printf دون reference؟؟؟؟؟ مع العلم ان هذه الدوال تأخد reference كا parameter وهي موجوده في مكتبه السي الرئيسيه stdio.h

كلا بل هذه الدوال تاخذ عناوين pointers

ربما سبب اللخبطة هو استخدام &

داخل التعابير، معامل & ليس رفرنس بل عنوان

لاحظ:

int *a = &x;

هنا ناخذ عنوان x و هذا التعبير ليس له علاقة بالرفرنس في السي بلص بلص

و هي عبارة صحيحة في السي و السي بلص بلص

------

الرفرنس يكون في الـ declaration (قبل علامة = )

int &a = x;

هنا نعرف a على انه reference

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

1
#8
hasan_aljudy كتب:

كلا بل هذه الدوال تاخذ عناوين pointers

ربما سبب اللخبطة هو استخدام &

داخل التعابير، معامل & ليس رفرنس بل عنوان

لاحظ:

int *a = &x;

هنا ناخذ عنوان x و هذا التعبير ليس له علاقة بالرفرنس في السي بلص بلص

و هي عبارة صحيحة في السي و السي بلص بلص

------

الرفرنس يكون في الـ declaration (قبل علامة = )

int &a = x;

هنا نعرف a على انه reference

نعم اذا كان قصدك عن ال reference variable فلايمكن استخدامه بال C ولكن ال reference بحد ذاته يمكن استخدامه بال C وهذا ما كنت اعنيه.

#9
#include <stdio.h>
int main(){
        int x = 10;
        int *x_ref = (int*) &x; //pointer x_ref gets assigned to the address of x.
        printf("%i's address is %x",x,x_ref);
        return 0;
}

تم تعديل هذه المشاركة بواسطة 0xAli في 16 مايو 2010 في 18:08

A man who wants to lead the orchestra must turn his back on the crowd

#10
اقتباس
نعم اذا كان قصدك عن ال reference variable فلايمكن استخدامه بال C ولكن ال reference بحد ذاته يمكن استخدامه بال C وهذا ما كنت اعنيه.

و ما الفرق؟؟ الـ reference غير موجود بالسي

كما قلت، scanf تاخذ مؤشرات pointers و ليس reference

#11

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

كما قال الأخ ASDen و الأخ حسن, لاتوجد references في C, و إنما تم استحداثها في ++C, لأجل الـ Operators Overloading.

أخ 0xAli, هذه هي الطريقة الصحيحة لطباعة المؤشرات:

#include <stdio.h>
int main(){
        int x = 10;
        int *x_ref = &x; // There is no need for casting!
		// %p is the correct way to print the address of x
        printf("%i's address is %p",x,x_ref);
        return 0;
}

تحياتي...

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