PDA

مشاهده نسخه کامل : تفاوت میان auto و extern



SajjadKhati
03-08-15, 14:02
ممنون گلپسر
نه
توی کتاب هم (بازم پیش پیش) خوندم که کلاس مثل نقشه ی یه شی (مثلا نقشه ی آشپزخونه) عمل میکنه و شی هم که از اون نقشه بوجود میاد که شبیه مثالی که زدی هست
اما کاربرد شی گرایی نسبت به برنامه نویسی ساخت یافته و ماژولار رو درک نکردم . (دونستن شاید کمی بدونم اما درک نکردم)
یه سئوال جداگانه هم اینکه چرا کلاس حافظه ی auto رو نمیشه تعریف کرد این طوری :



#include "stdafx.h"
#include<iostream>
using namespace std;
extern int x = 8;


void main()
{
auto int y = 5;
cout << y<<endl<<x<<endl;
}


extern کار میکنه اما برا auto تا نوع متغییر کنارش ( int) رو برنداریم ، نمیشه

ravegoat
03-08-15, 16:09
طبق کدی که خودت درج کردی، auto در تعریف متغیر هایی به کار میره که قراره به شکل محلی به کار گرفته بشن. برای همین نمیشه auto را خارج یک تابع به کار برد و طبق مثال متغیر y خارج از بلوک main ناشناخته خواهد بود. در طرف مقابل extern در تعریف متغیر هایی به کار میره که قراره جهانی باشن و برای همین طبق مثال متغیر x هم داخل بلوک main و هم خارج اون شناخته شده است.
حالا اگر شما بخواهید auto رو خارج از بلوک به کار ببرید، با یک Syntax Error برای int رو به رو میشید. ولی قضیه به اینجا ختم نمیشه. با حذف int از مقابل auto به هنگام کامپایل یک Runtime Error به وجود خواهد اومد که بیان می کنه بهره گیری از auto خارج از یک بلوک امکان پذیر نخواهد بود چون فلسفه ی auto محلی بودن هستش.
به علاوه هر متغیری که داخل یک تابع تعریف بشه، اگر Storage Classی براش در نظر گرفته نشه، به طور پیش فرض از نوع auto خواهد بود یعنی مطابق مثال auto int y = 5; با int y = 5; فرقی نمی کنه.
برای اطلاعات بیش تر:
C - Storage Classes (Only the registered members can see the link)

پ.ن.:
سجاد جان لطفا اگه سوال جداگانه ای داره، در تاپیک جداگانه مطرحش کن تا کاربران بعدی که براساس عنوان به تاپیک ها مراجعه می کنن، طی دنبال کردن پست ها سر در گم نشن. ممنون :give_rose: