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

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

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

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

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

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)