تم النشر منذ 25 Jun 2014 السلام عليكم الكود التالي واضح بدون شرح#include <stdio.h>int i;int inci(){ i = i + 1; return i;}void Show(int i1, int i2,int i3, int i4){ printf("%d %d %d %d \n",i1, i2, i3, i4);}int main(){ i = 0; Show(inci(), inci(), inci(), inci()); getchar();}السؤال لماذا النتيجة هي 4321 بدلا من 1234 ؟ 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 25 Jun 2014 سؤال جميل شكراً لكيتم معالجة الوسطاء من اليمين لليسار (ملاحظة : هذا لا علاقة له بالـ calling convention وكيفية دفع الوسطاء للمكدس )وهذا مثال#include <stdio.h>void test(int a,int b){}int main(){ test(putchar('M'),putchar('N'));} بالتوفيق 1 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 26 Jun 2014 فعلا اخ مصطفىللتوضيح اكثر نقوم بـ disassembly للملف main.c بهذا الشكلgcc -g -c main.cobjdump -d -M intel -S main.o > main.asmالصورة التالية توضح العملية 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 26 Jun 2014 السؤال لماذا النتيجة هي 4321 بدلا من 1234 ؟الكود المكتوب ينتج unspecified behavior و ذلك لأن ترتيب الحصول على نتيجة الدالة inci يحدده المترجم، أنظر هذا المثال. و الله ولي التوفيق 1 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
تم النشر منذ
السلام عليكم
الكود التالي واضح بدون شرح
السؤال لماذا النتيجة هي 4321 بدلا من 1234 ؟
شارك هذا الرد
رابط المشاركة
شارك الرد من خلال المواقع ادناه