اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

نادیده گرفتن یک سردرگمی توسط کامپایلر

+1 امتیاز
52 نمایش

کد زیر رو در نظر بگیریم

int f(void)
{
  return 0;
}
int f(int x = 10)
{
  return x;
}

int main()
{
  f(4);
  return 0;
}

کد زیر نباید اخطار بده که کامپایلر نمی‌دونه از کدوم نسخه‌ی f استفاده کنه؟

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پرسیده شده چهارشنبه ۱۸ اردیبهشت ۱۳۹۲ در C++ توسط prodo  

1 پاسخ

0 امتیاز

به نظرم دو تا موضوع با هم قاطی شده. به صورت مشخص این کد، متعلق به زبان C++ هست نه C. چون در C مقدار پیش‌فرض به آرگومان نمی‌تونیم به این صورت بدیم.

اصل سوال از این‌جا ناشی می‌شه که در C و C++، اعلان f(void) معنای متفاوتی داره.

در C++ اعلان f() دقیقاً به معنی f(void) هست. یعنی این تابع هیچ پارامتری نمی‌گیره.

در C، اعلان f(void) به این معنی هست که این تابع هیچ پارامتری نمی‌گیره اما f() به این معنی هست که این تابع می‌تونه هر تعداد پارامتر بدون نوع مشخص بگیره.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده دوشنبه ۶ خرداد ۱۳۹۲ توسط prodo  

در هر صورت کد بالا در C اجرا نمی‌شه و در C++ اخطاری نداره.

موضوع دوم چیه؟
تو C مشکل دیگه ای هم داره ینی؟

گفتم به صورت ضمنی دیگه. ۱) تفاوت زبان C و C++ و ۲) f() و f(void)