سلام
راستش تازه برنامه نویسی c و c++ رو شروع کردم و الآن از turbo c v2.01 استفاده میکنم و فعلا هم توی آموزش c هستم...
این سوالا برام پیش اومده:
1-به طور کلی return0 به چه منظوری توی آخر برنامه استفاده میشه؟
2-من مطلبی که در مورد exit0 و exit 1 جواب داده بودید رو خوندم که معمولا در مورد برنامه هایی که با موفقیت تموم میشه 0 میذارن و اونایی که خطا داره 1 میذارن
دستور exit در سی پلاس
حالا سوالم اینه که اولا برنامه فرق تموم شدن با Exit و Return رو میفهمه؟ دوما ERRORLEVEL که توی همین پست بهش اشاره کردید رو چطور توی برنامه استفاده میکنند؟یعنی فقط برای حالتی که Exit باشه میشه آدرس به این ERRORLEVEL داد؟
3-چه وقتی از int main استفاده میکنیم و چه وقتی از void main?
4-من یه برنامه حلقه بینهایت نوشتم که برنامه از حالت اجرا خارج نمیشه...توی سایتا نوشته بود با ctrl+c خارج میشه ولی نشد...مجبور میشه کلا turboc رو ببندم...راه حلی نداره؟
return باعث خروج از تابع میشه، return 0 هم باعث خروج از تابع میشه و هم مقدار 0 رو بر می گردونه. چون main تابع اصلی برنامه است، خروج از main به معنای پایان یافتن اجرای برنامه است.
در زبان های ++C / C هر تابعی که در تعریف اش مقدار بازگشتی داره نیاز به دستور return و یک مقدار بازگشتی داره. ()int main هم یک تابع با مقدار بازگشتی است و
وجود اون return الزامی است، گو اینکه بعضی کامپایلر ها نسبت به وجود return حساسیت نشون نمی دهند. اما اینکه 0 برگردونده بشه یا هر عدد دیگری بستگی به تمایل برنامه نویس
و منطق کد اش داره.
exit باعث پایان یافتن اجرای برنامه میشه، در داخل تابع main شبیه return هست، اما return اگر داخل یک تابع بجز main نوشته بشه دیگه ربطی به پایان یافتن اجرای برنامه نداره.
return باعث خروج از تابع میشه و فقط در داخل main ئه که عملکرد خروج از برنامه رو داره. اما exit کاری به این نداره که در کدوم تابع اجرا میشه.
مزیت exit اینه که در هر جایی از کد، چه در main و چه در تابع دیگری باعث خروج از برنامه میشه. return 0 یا return EXIT_SUCCESS فرقی با (exit(0 یا (exit (EXIT_SUCCESS نداره.
EXIT_SUCCESS معادل عدد 0 ئه و اصولا برای خروج موفقیت آمیز از برنامه بکار میره.
ERRORLEVEL یک عبارت مخصوص فایل های Batch ئه که پسوند bat یا cmd دارند. ربطی به زبان C++/C یا هر زبان دیگری هم نداره. یک متغیر از پیش تعریف شده است و
آخرین برنامه ای که اجراش تموم شده مقدار بازگشتی اش در این متغیر قرار می گیره. فرقی نمی کنه که شما در برنامه C++/C تان به چه طریقی مقدار بازگشتی
رو تعیین می کنید، 0 ئه، مگر اینکه با return یا exit صریحا مقدار دیگری رو برگردونید.
کلا ()void main استاندارد نیست، بعضی از کامپایلر ها ازش پشتیبانی می کنند اما کلا باید ازش پرهیز بشه. void main با return 0 یا هر return همراه مقدار دیگری سازگار نیست،
چون void مقدار بازگشتی نداره. برنامه ای که با ()void main تعریف شده مقدار 0 بر می گردونه مگر اینکه با exit مقدار دیگری برگردونده بشه.
خود برنامه ای که اجراش تموم میشه وقتی مقدار بازگشتی رو ارسال می کنه که دیگه در انتهای اجرا است، پس مقدار بازگشتی هر چه که باشه برای خودش نیست، برای استفاده
سایر نرم افزار ها است.
تمامی نرم افزار ها موقعی که اجرا شون تموم میشه این مقدار عددی رو بر می گردونند، این مورد از دوران MS-DOS به یادگار مونده. اگه بصورت مشخص اون مقدار خروجی مشخص نشه
عدد صفر بر گردونده خواهد شد. فرقی نمی کنه که اجرای برنامه چطور پایان پیدا می کنه، چه با return و چه exit و چه هر شیوه دیگری، به هر حال اون مقدار بازگشتی رو داره.
دو نوع اجرا داریم، یک اجرای تحت نظارت Debugger که ممکنه فشار یک ترکیب کلیدی در اجرای برنامه موثر باشه و یک اجرای بدون نظارت Debugger که فقط ترکیب های کلیدی خاصی
عمل می کنند که در کد برنامه صریحا بهشون اشاره بشه. Ctrl + C معمولا در دریافت های ورودی مثل scanf یا cin دریافت میشه، اما در سایر موارد نه.
شما لابد داخل حلقه تان کدی ندارید که نسبت به ترکیب کلیدی خاصی حساس باشه، بنابر این در هنگام اجرای بدون نظارت Debugger روی ترکیب کلیدی Ctrl + C حساسیتی نشون نمیده.
وقتی کلید ESC فشار داده بشه اجرای برنامه رو خاتمه میده :
کد:
#include <stdio.h>
#include <conio.h>
int main()
{
char c;
do {
_asm {
IN AL, 0x60;
MOV c, AL }
} while (c != 1);
return 0;
}