Code Corona

نسخه‌ي كامل: دو تا سوال فنی !
شما هم اكنون متن قالب بندي نشده را مي‌بينيد.مشاهده‌ي نسخه‌ي اصلي
سلام دوستان کسی میدونه چرا وقتی کد زیر رو اجرا میکنیم کاراکترهایی که به تابع ارسال میشن ، جابجا میشن ؟

کد:
#include <iostream>
#include <conio.h>
using namespace std;


void func(int a,int b)
{
     cout<<"a ="<<a<<endl<<"b = "<<b;
}    



int main()
{
    int a=3;
    func(a,a++);
    getch();
    return 3;
}

در خروجیa=4 و b=3 چاپ میشه !
=--------------------------------------------------------------------

سوال دوم دلیل اینکه کد زیر در کامپایلر dev++c یک جواب و در ویژوال استادیو یک جواب دیگه چاپ میکنه چیه ؟

کد:
#include <iostream>
#include <conio.h>
using namespace std;


int main()
{
    int a=3;
    cout<<a++<<a++;
    cout<<" "<<a;
    
    getch();
    return 3;
}

//dev c++      3  4
//Visual studio  4 3

ممنون
در مورد این سوال ها باید بگم که این نتیجه ها برمیگرده به این که کامپایلر از کدوم طرف پارامترهای توابع رو میگیرن، راست به چپ یا چپ به راست.
برای سوال اول باید بگم که چون پارامترهای توابع از راست به چپ فرستاده میشن پس:
پارامتر سمت راستی یعنی b که مقدار ++a به اون فرستاده شده مقدار خود a رو میگیره چون ++ بعد a هست و اثرش در دستور بعدی مشخص میشه ، پس تا اینجا همون a=3 به b فرستاده میشه.
برای پارامتر سمت چپی یعنی a ، اون ++ اثر خودشو گذاسته و مقدار 4 رو برای a میفرسته.
و به این ترتیب مقادیر 4 و 3 در a و b قرار میگیرن.
برای سوال دوم هم موضوعی مشابه بالا وجود داره و برمیگرده به کامپایلر که اولویت رو از راست به چپ برای محاسبه بگیره یا چپ به راست که این واضح که اولویت باید از چپ به راست باشه پس میشه نتیجه گرفت که Microsoft در طراحی کامپایلر خودش به این اصل همگانی توجه نکرده و روال کار خودشو مثل ارسال پارامترهای توابع از راست به چپ گرفته و این به نظر من برای یک عبارت محاسباتی کار اشتباهیه Grimace
خیلی جو گرفتم Grin
سهیل جان ممنون . در مورد سوال اول پارامترهای تابع ازسمت راست در یک پشته قرار می گیرند و هنگام فراخوانی تابع هم برای آرگومان ها هم وضع برقراره بنابراین مقدارهای مشاهده شده در خروجی چاپ می شوند و این ریطی به هیچ کامپایلر خاصی فکر کنم نداشته باشه چون من هم در ویژوال استادیو و هم در dev++c امتحان کردم نتیجه یکی بود و برای مورد دوم هم حرفی که زدی کاملا درشته و پیاده سازی مایکروسافت با dev++c فرق می کنه !
من که نگفتم سوال اول ربطی به کامپایلر داره ٬اگه یک بار دیگه جواب منو بخونین متوجه میشین که تفاوت کامپایلری که گفتم مال سوال دومتون بود.
برای سوال اول فقط گفتم پارامترها رو از راست میگیره ( همونطور که خودتون هم گفتین) و من مقایسه ی بین DEV و VS رو فقط در جواب دوم مطرح کردم.
منم منظورم این نبود که شما همچین حرفی زدی ، من جواب سوال خودم رو کامل دادم که دیگه هیچ ابهامی باقی نمونه .
آدرس اصلي