آرگومان های تابع اصلی c. چند جزئیات در مورد عملکرد اصلی. استفاده از آرگومان های خط فرمان
لطفاً توجه داشته باشید که این نسخه از main() هیچ پارامتری ندارد. با این حال، بسیاری از برنامه ها نیاز به ورودی دارند. برای مثال، فرض کنید برنامه ای به نام Picture می نویسید که یک تصویر را به عنوان ورودی می گیرد و سپس یک تصویر کوچک (نسخه کوچکتر از تصویر) از آن تصویر می سازد. چگونه تابع Picture می داند که کدام تصویر را بپذیرد و پردازش کند؟ کاربر باید به برنامه بگوید که کدام فایل را باز کند. این میتواند بصورت زیر انجام شود:
// برنامه: تصویر #شامل
با این حال، یک مشکل بالقوه در اینجا وجود دارد. هر بار که برنامه راه اندازی می شود، منتظر ورودی کاربر می ماند. اگر برنامه را به صورت دستی از خط فرمان یک بار در هر تصویر اجرا کنید، مشکلی نیست. اما اگر می خواهید با تعداد زیادی فایل کار کنید یا برنامه دیگری بتواند این برنامه را اجرا کند، این مشکل از قبل وجود دارد.
بیایید به این موضوع با جزئیات بیشتری نگاه کنیم.
به عنوان مثال، شما می خواهید برای تمام فایل های تصویری که در یک فهرست خاص قرار دارند، تصاویر کوچک ایجاد کنید. چگونه انجامش بدهیم؟ با وارد کردن دستی نام هر فایل، می توانید این برنامه را به تعداد تصاویر موجود در دایرکتوری اجرا کنید. با این حال، اگر صدها تصویر وجود داشته باشد، این رویکرد، به تعبیری ملایم، چندان موثر نخواهد بود! راه حل در اینجا این است که برنامه ای بنویسید که از طریق هر نام فایل در یک دایرکتوری تکرار می شود و هر بار روی هر فایل Picture را فراخوانی می کند.
اکنون موردی را در نظر بگیرید که در آن شما یک وب سایت دارید و می خواهید هر بار که کاربر تصویری را در سایت آپلود می کند، یک تصویر کوچک ایجاد کند. این برنامه نمی تواند ورودی اینترنت را بپذیرد و سؤال منطقی به شرح زیر است: "پس چگونه نام فایل را وارد کنیم؟" یک راه حل وجود دارد: وب سرور هر بار که یک فایل دانلود می شود، تابع Picture را به طور خودکار فرا می خواند.
در هر دو مورد، ما می خواهیم که برنامه خارجی در هنگام اجرا، نام فایل را به عنوان ورودی به برنامه ما ارسال کند، نه اینکه خود Picture منتظر بماند تا کاربر به صورت دستی نام فایل را وارد کند.
آرگومان های خط فرمانآرگومان های رشته ای اختیاری هستند که توسط سیستم عامل در هنگام شروع به برنامه ارسال می شود. برنامه می تواند از آنها به عنوان ورودی استفاده کند یا آنها را نادیده بگیرد. همانطور که پارامترهای یک تابع داده هایی را برای پارامترهای تابع دیگر فراهم می کنند، آرگومان های خط فرمان افراد یا برنامه ها را قادر می سازند تا ورودی یک برنامه را ارائه دهند.
عبور از آرگومان های خط فرمان
برنامه های اجرایی را می توان از طریق یک تماس در خط فرمان راه اندازی کرد. به عنوان مثال، برای اجرای فایل اجرایی MyProgram که در دایرکتوری ریشه درایو C در سیستم عامل ویندوز قرار دارد، باید وارد کنید:
C:\>MyProgram
برای ارسال آرگومان های خط فرمان به MyProgram، باید آنها را بعد از نام فایل اجرایی فهرست کنید:
C:\>MyProgram SomeContent.txt
اکنون، هنگام اجرای MyProgram، SomeContent.txt به عنوان آرگومان خط فرمان ارائه می شود. یک برنامه می تواند چندین آرگومان خط فرمان داشته باشد که با فاصله از هم جدا شده اند:
ج:\>MyProgram SomeContent.txt SomeOtherContent.txt
این همچنین با سیستم عامل های دیگر مانند لینوکس کار می کند (اگرچه ساختار دایرکتوری با ویندوز متفاوت خواهد بود).
اگر برنامه خود را از یک IDE اجرا می کنید، IDE شما باید راهی برای وارد کردن آرگومان های خط فرمان ارائه دهد.
برای کاربران ویژوال استودیو: روی پروژه مورد نظر در Solution Explorer کلیک راست کرده و سپس انتخاب کنید "خواص":
سپس "ویژگی های پیکربندی > اشکال زدایی". در پانل سمت راست یک خط وجود خواهد داشت "مشاهده های تیم". میتوانید آرگومانهای خط فرمان را در اینجا وارد کنید، و زمانی که برنامه شما شروع به کار کرد، آنها به طور خودکار به برنامه شما ارسال میشوند:
کد:: کاربران را مسدود می کندنیاز به انتخاب "Project > Set program`s arguments":
استفاده از آرگومان های خط فرمان
اکنون که می دانید چگونه آرگومان های خط فرمان را به یک برنامه منتقل کنید، قدم بعدی دسترسی به آنها از داخل برنامه است. برای انجام این کار، از شکل دیگری از تابع main () استفاده می شود که دو آرگومان (argc و argv) را به صورت زیر می گیرد:
int main(int argc، char *argv)
شما همچنین می توانید این گزینه را مشاهده کنید:
int main (int argc، char** argv)
int main(int argc، char * * argv) |
اگرچه هر دوی این گزینه ها در اصل یکسان هستند، توصیه می شود از اولین استفاده کنید، زیرا بصری تر است.
argc (eng. ارگ ument ج ount" = "تعداد آرگومان ها") یک پارامتر عدد صحیح است که شامل تعداد آرگومان های ارسال شده به برنامه است. argc همیشه حداقل 1 خواهد بود، زیرا اولین آرگومان همیشه نام خود برنامه است. هر آرگومان خط فرمانی که کاربر ارائه میکند باعث میشود که argc 1 افزایش یابد.
argv (انگلیسی" ارگ ument v alues" = "مقادیر آرگومان") جایی است که مقادیر آرگومان واقعی ذخیره می شود. اگرچه اعلان argv کمی ترسناک به نظر می رسد، اما فقط یک آرایه است. طول این آرایه argc است.
بیایید یک برنامه کوتاه به نام MyArguments بنویسیم که مقادیر همه آرگومان های خط فرمان را چاپ می کند:
// برنامه: MyArguments #include
// برنامه: MyArguments #عبارتند از int main (int argc، char * argv) // هر آرگومان را حلقه بزنید و شماره سریال و مقدار آن را چاپ کنید برای (int count = 0 ; count< argc ; ++ count ) std::cout<< count << " " << argv [ count ] << "\n" ; بازگشت 0 ; |
اکنون، هنگام فراخوانی MyArguments با آرگومان های خط فرمان SomeContent.txt و 200، خروجی به صورت زیر خواهد بود:
3 استدلال وجود دارد:
0 C:\MyArguments
1SomeContent.txt
2 200
پارامتر 0 مسیر و نام برنامه فعلی است. پارامترهای 1 و 2 در اینجا آرگومان های خط فرمان هستند که ما ارسال کردیم.
مدیریت آرگومان های عددی
آرگومان های خط فرمان همیشه به عنوان رشته ارسال می شوند، حتی اگر مقدار ارائه شده عددی باشد. برای استفاده از آرگومان خط فرمان به عنوان عدد، باید آن را از رشته به عدد تبدیل کنید. متأسفانه C++ این را کمی پیچیدهتر از آنچه لازم است میکند:
#عبارتند از
#عبارتند از #عبارتند از #عبارتند از #عبارتند از int main (int argc، char * argv) اگر (argc<= 1 ) // در برخی از سیستم عامل ها، argv ممکن است به سادگی یک رشته خالی و بدون نام برنامه باشد // موردی را که ممکن است argv خالی یا خالی نباشد رسیدگی کنید اگر (argv [ 0 ] ) std::cout<<
"Usage: "
<<
argv
[
0
]
<<
" دیگر std::cout<<
"استفاده: خروج (1)؛ |
گاهی اوقات هنگام شروع یک برنامه، انتقال اطلاعات به آن مفید است. معمولاً این اطلاعات از طریق آرگومان های خط فرمان به main() منتقل می شود. آرگومان خط فرماناطلاعاتی است که در خط فرمان سیستم عامل به دنبال نام برنامه وارد می شود. به عنوان مثال، برای شروع کامپایل یک برنامه، باید چیزی شبیه به زیر را در خط فرمان پس از اعلان تایپ کنید:
رونوشت نام برنامه
نام برنامهیک آرگومان خط فرمان است؛ نام برنامه ای را که می خواهید کامپایل کنید، مشخص می کند.
برای پذیرش آرگومان های خط فرمان، از دو آرگومان داخلی خاص استفاده می شود: argc و argv. پارامتر argc شامل تعدادی آرگومان در خط فرمان است و یک عدد صحیح است و همیشه حداقل 1 است، زیرا اولین آرگومان نام برنامه است. و پارامتر argv یک اشاره گر به آرایه ای از اشاره گرها به رشته ها است. در این آرایه، هر عنصر به یک آرگومان خط فرمان اشاره می کند. همه آرگومانهای خط فرمان رشتهای هستند، بنابراین تبدیل هر عدد به فرمت باینری مورد نظر باید در برنامه هنگام توسعه ارائه شود.
در اینجا یک مثال ساده از استفاده از آرگومان خط فرمان آورده شده است. کلمه Hello و نام شما روی صفحه نمایش داده می شود که باید به عنوان آرگومان خط فرمان مشخص شود.
#عبارتند از
اگر نام این برنامه (نام) و نام شما Tom است، برای اجرای برنامه باید نام Tom را در خط فرمان وارد کنید. در نتیجه اجرای برنامه پیغام Hello, Tom بر روی صفحه ظاهر می شود.
در بسیاری از محیطها، همه آرگومانهای خط فرمان باید با فاصله یا تب جدا شوند. کاما، نقطه ویرگول و کاراکترهای مشابه جداکننده در نظر گرفته نمی شوند. مثلا،
Run Spot، اجرا
از سه رشته کاراکتر تشکیل شده است، while
اریک، ریک، فرد
نشان دهنده یک رشته کاراکتر واحد است - کاما، به عنوان یک قاعده، جداکننده در نظر گرفته نمی شود.
اگر رشته ای دارای فاصله باشد، می توانید رشته را در برخی از محیط ها در دو گیومه قرار دهید تا از تولید آرگومان های متعدد جلوگیری کنید. در نتیجه، کل رشته یک آرگومان در نظر گرفته می شود. برای کسب اطلاعات بیشتر در مورد نحوه تنظیم پارامترهای خط فرمان سیستم عامل، اسناد سیستم عامل خود را مرور کنید.
بسیار مهم است که argv را به درستی اعلام کنید. در اینجا نحوه انجام این کار اغلب آمده است:
Char *argv;
براکت های مربع خالی نشان می دهد که آرایه دارای طول نامحدود است. اکنون می توان با نمایه سازی آرایه argv به آرگومان های منفرد دسترسی پیدا کرد. به عنوان مثال، argv به اولین رشته کاراکتر اشاره می کند که همیشه نام برنامه است. argv به استدلال اول و غیره اشاره می کند.
مثال کوچک دیگری از استفاده از آرگومان های خط فرمان، برنامه زیر، شمارش معکوس است. این برنامه به عقب شمارش می کند، از مقداری شروع می شود (که در خط فرمان مشخص شده است)، و وقتی به 0 رسید، بوق می زند. توجه داشته باشید که آرگومان اول، حاوی مقدار شروع، با استفاده از تابع استاندارد atoi () به یک مقدار صحیح تبدیل می شود. اگر آرگومان خط فرمان دوم (و اگر نام برنامه را به عنوان آرگومان در نظر بگیریم، سومین آرگومان) خط "نمایش" (نمایش) باشد، نتیجه شمارش (به ترتیب معکوس) روی صفحه نمایش داده می شود.
/* برنامه برای شمارش به ترتیب معکوس. */ #عبارتند از
لطفا توجه داشته باشید که اگر آرگومان های خط فرمان مشخص نشده باشد، یک پیام خطا نمایش داده می شود. برنامههایی که آرگومانهای خط فرمان را میگیرند اغلب کارهای زیر را انجام میدهند: وقتی کاربر این برنامهها را بدون وارد کردن اطلاعات مورد نیاز اجرا میکند، دستورالعملهایی را درباره نحوه درست تعیین آرگومانها نمایش میدهد.
برای دسترسی به یک کاراکتر جداگانه یکی از آرگومان های خط فرمان، یک شاخص دوم را در argv وارد کنید. به عنوان مثال، برنامه زیر، کاراکتر به کاراکتر، تمام آرگومان هایی را که با آنها فراخوانی شده است، چاپ می کند:
#عبارتند از به یاد داشته باشید، فهرست اول argv دسترسی به رشته را فراهم می کند و شاخص دوم دسترسی به شخصیت های جداگانه آن را فراهم می کند. معمولاً از argc و argv برای دادن دستورات اولیه ای که برنامه هنگام شروع به آن نیاز دارد استفاده می شود. به عنوان مثال، آرگومان های خط فرمان اغلب اطلاعاتی مانند نام فایل، یک گزینه یا یک رفتار جایگزین را مشخص می کنند. استفاده از آرگومانهای خط فرمان به برنامه شما «ظاهر حرفهای» میدهد و استفاده از آن را در فایلهای دستهای آسانتر میکند. نامهای argc و argv سنتی هستند، اما الزامی نیستند. شما می توانید این دو پارامتر را در تابع main() هر چه بخواهید فراخوانی کنید. علاوه بر این، برخی از کامپایلرها ممکن است از آرگومان های اضافی برای main() پشتیبانی کنند، بنابراین حتماً مستندات کامپایلر خود را بررسی کنید. هنگامی که یک برنامه به پارامترهای خط فرمان نیاز ندارد، معمولاً به طور صریح تابع main() بدون پارامتر اعلام می شود. در این حالت از کلمه کلیدی void در لیست پارامترهای این تابع استفاده می شود. هنگام ایجاد یک برنامه کنسول در زبان برنامه نویسی C++، یک خط بسیار شبیه به این به طور خودکار ایجاد می شود: پارامترهای تابع Int main(int argc، char* argv) // main(). این خط سربرگ تابع اصلی main() است، پارامترهای argс و argv در براکت اعلام شده اند. بنابراین، اگر برنامه ای را از طریق خط فرمان اجرا کنید، امکان انتقال اطلاعات به این برنامه وجود دارد، برای این کار پارامترهای argc و argv وجود دارد. پارامتر argc یک نوع داده int دارد و شامل تعداد پارامترهایی است که به تابع اصلی ارسال شده است. علاوه بر این، argc همیشه حداقل 1 است، حتی زمانی که ما هیچ اطلاعاتی را ارسال نمی کنیم، زیرا اولین پارامتر نام تابع است. پارامتر argv آرایه ای از اشاره گرها به رشته ها است. فقط داده های رشته ای را می توان از طریق خط فرمان منتقل کرد. اشاره گرها و رشته ها دو موضوع بزرگ هستند که بخش های جداگانه ای برای آنها ایجاد شده است. بنابراین از طریق پارامتر argv است که هر اطلاعاتی منتقل می شود. بیایید برنامه ای ایجاد کنیم که از طریق خط فرمان ویندوز اجرا کنیم و اطلاعاتی را به آن منتقل کنیم. // argc_argv.cpp: نقطه ورودی برنامه کنسول را تعریف می کند. #include "stdafx.h" #include // کد کد::Blocks // کد Dev-C++ // argc_argv.cpp: نقطه ورودی برنامه کنسول را تعریف می کند. #عبارتند از بعد از اینکه برنامه را دیباگ کردیم، خط فرمان ویندوز را باز کرده و فایل اجرایی برنامه خود را به پنجره خط فرمان بکشید، مسیر کامل برنامه در خط فرمان نمایش داده می شود (اما می توانید مسیر برنامه را به صورت دستی وارد کنید. ) پس از آن می توانید کلیک کنید واردو برنامه شروع خواهد شد (شکل 1 را ببینید). شکل 1 - پارامترهای تابع اصلی از آنجایی که ما به سادگی برنامه را اجرا کردیم و هیچ آرگومانی به آن ارسال نکردیم، پیام Not arguments ظاهر شد. شکل 2 راه اندازی همان برنامه را از طریق خط فرمان، اما با ارسال آرگومان Open به آن نشان می دهد. شکل 2 - پارامترهای تابع اصلی استدلال کلمه Open است، همانطور که از شکل مشخص است، این کلمه روی صفحه ظاهر شد. می توانید چندین پارامتر را به طور همزمان ارسال کنید و آنها را با کاما از هم جدا کنید. اگر لازم است پارامتری متشکل از چند کلمه را پاس کنید، باید آنها را در دو گیومه قرار دهید و سپس این کلمات به عنوان یک پارامتر در نظر گرفته می شوند. به عنوان مثال، شکل راه اندازی یک برنامه را نشان می دهد و یک آرگومان متشکل از دو کلمه را به آن ارسال می کند - کار می کند. شکل 3 - پارامترهای تابع اصلی و اگر نقل قول ها را حذف کنید. سپس ما فقط کلمه It را خواهیم دید. اگر قصد ندارید هنگام اجرای برنامه هیچ اطلاعاتی را ارسال کنید، می توانید آرگومان های تابع main() را حذف کنید و همچنین می توانید نام این آرگومان ها را تغییر دهید. گاهی اوقات تغییراتی در پارامترهای argc و argv رخ می دهد، اما همه اینها به نوع برنامه ایجاد شده یا محیط توسعه بستگی دارد. هنگام ایجاد خودکار یک برنامه کنسول در زبان برنامه نویسی C++، یک تابع اصلی بسیار شبیه به این به طور خودکار ایجاد می شود: int main(int argc، char * argv) هدر تابع حاوی امضای تابع اصلی main() با آرگومان های argс و argv است. وقتی برنامه ای را از طریق خط فرمان ویندوز اجرا می کنید، می توانید اطلاعاتی را به آن منتقل کنید. در این حالت خط فرمان به شکل زیر خواهد بود: آرگومان های خط فرمان با یک یا چند فاصله از هم جدا می شوند. آرگومان argv شامل نام کامل برنامه است: #عبارتند از کوت<< argv << endl; بازگشت 0؛ نتیجه اجرا مثال: محاسبه حاصل ضرب دو عدد صحیح #عبارتند از Int a = 0، b=0; اگر (argc > 1) a = StrToInt(argv)؛ اگر (argc > 2) b = StrToInt(argv); کوت<< a <<«*»
<< b << «= «
<< a*b << endl; بازگشت 0؛ این برنامه به شرح زیر راه اندازی می شود: نتیجه اجرا برای ارسال آرگومان های خط فرمان هنگام اشکال زدایی یک برنامه، باید به منو دسترسی داشته باشید خواصپروژه هنگام اجرای برنامه در حالت اشکال زدایی، آرگومان های وارد شده توسط برنامه به عنوان آرگومان های خط فرمان تلقی می شوند. آرگومان های اختیاری و با نام C# 4.0 ویژگی جدیدی را معرفی می کند که تعیین آرگومان ها را هنگام فراخوانی یک متد آسان تر می کند. این درمان نامیده می شود آرگومان های اختیاریو به شما امکان می دهد یک مقدار پیش فرض برای پارامتر متد تعریف کنید. اگر هنگام فراخوانی متد، آرگومان مربوطه برای پارامتر مشخص نشده باشد، این مقدار به طور پیش فرض استفاده می شود. بنابراین، ارائه استدلال برای چنین پارامتری ضروری نیست. آرگومانهای اختیاری فراخوانی روشهایی را که آرگومانهای پیشفرض برای برخی از پارامترها اعمال میشوند، آسانتر میکنند. آنها همچنین می توانند به عنوان یک شکل "میانبر" برای بارگذاری بیش از حد روش استفاده شوند. انگیزه اصلی برای افزودن آرگومان های اختیاری، نیاز به ساده سازی تعامل با اشیاء COM بود. چندین مدل شیء مایکروسافت (مانند مایکروسافت آفیس) عملکردی را از طریق اشیاء COM ارائه می دهند که بسیاری از آنها مدت ها پیش نوشته شده اند و برای گرفتن پارامترهای اختیاری طراحی شده اند. نمونه ای از استفاده از آرگومان های اختیاری در زیر نشان داده شده است: استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.Linq؛ با استفاده از System.Text. فضای نام ConsoleApplication1 ( کلاس Program ( // آرگومان های b و c هنگام فراخوانی static int mySum(int a, int b = 5, int c = 10) اختیاری هستند ( a + b + c; ) static void Main() ( int sum1 = mySum(3)؛ int sum2 = mySum(3,12)؛ Console.WriteLine("Sum1 = "+sum1); Console.WriteLine("Sum2 = "+sum2); Console.ReadLine(); ) ) باید در نظر داشت که تمام آرگومان های اختیاری باید در سمت راست آرگومان های مورد نیاز مشخص شوند. علاوه بر متدها، آرگومان های اختیاری را می توان در سازنده ها، نمایه سازها و نمایندگان استفاده کرد. یکی از مزایای آرگومان های اختیاری این است که مدیریت فراخوانی های متد پیچیده و سازنده را برای برنامه نویس آسان تر می کند. از این گذشته، اغلب لازم است که پارامترهای بیشتری را در یک روش از آنچه معمولاً مورد نیاز است، مشخص کنیم. و در چنین مواردی، برخی از این پارامترها را می توان با استفاده دقیق از آرگومان های اختیاری اختیاری کرد. این بدان معنی است که شما فقط باید آن آرگومان هایی را که در یک مورد خاص مهم هستند و نه همه آرگومان هایی که در غیر این صورت مورد نیاز هستند را پاس کنید. این رویکرد به شما امکان می دهد تا روش را منطقی کنید و مدیریت برنامه نویس را با آن ساده کنید. یکی دیگر از قابلیت هایی که با انتشار .NET 4.0 به سی شارپ اضافه شد پشتیبانی از به اصطلاح آرگومان های نامگذاری شده. همانطور که می دانید، هنگام ارسال آرگومان ها به یک متد، ترتیب آنها، به عنوان یک قاعده، باید با ترتیبی که پارامترها در خود متد تعریف می شوند، مطابقت داشته باشد. به عبارت دیگر، مقدار آرگومان بر اساس موقعیت آن در لیست آرگومان به پارامتر نسبت داده می شود. آرگومان های نامگذاری شده برای غلبه بر این محدودیت طراحی شده اند. یک آرگومان با نام به شما امکان می دهد نام پارامتری را که مقدار آن به آن اختصاص داده شده است را مشخص کنید. و در این صورت دیگر ترتیب ادله اهمیتی ندارد. بنابراین، آرگومانهای نامگذاری شده تا حدودی شبیه به اولیهکنندههای شیء ذکر شده قبلی هستند، اگرچه از نظر نحو با آنها تفاوت دارند. برای تعیین آرگومان با نام، از شکل دستور زیر استفاده کنید: پارامتر_نام: مقدار اینجا پارامتر_نامنشان دهنده نام پارامتری است که مقدار به آن ارسال می شود. البته parameter_name باید نام پارامتر واقعی متدی باشد که فراخوانی می شود.
{…}
اگر برنامه ای را از طریق خط فرمان اجرا کنید، امکان انتقال اطلاعات به این برنامه وجود دارد. آرگومان های خط فرمان argc و argv برای این کار وجود دارد.
پارامتر argc از نوع int است و شامل تعداد پارامترهای ارسال شده به تابع اصلی می باشد. علاوه بر این، argc همیشه حداقل 1 است، حتی زمانی که هیچ اطلاعاتی به تابع اصلی منتقل نمی شود، زیرا اولین پارامتر نام برنامه است.
پارامتر argv آرایه ای از اشاره گرها به رشته ها است. فقط داده های رشته ای را می توان از طریق خط فرمان منتقل کرد.
Drive:\path\name.exe argument1 argument2 ...
با استفاده از namespace std.
}
این برنامه از تابع برای تبدیل رشته به عدد صحیح ()StrToInt از اینجا استفاده می کند.
با استفاده از namespace std.
int StrToInt(char *s) (…)
int main(int argc، char * argv) (
}اشکال زدایی یک برنامه با آرگومان های خط فرمان
روی زبانه ویژگی های پیکربندی -> اشکال زداییانتخاب کنید آرگومان های فرمانو مقادیر آنها را تعیین کنید. استدلال های اختیاری
آرگومان های نامگذاری شده