نمایش نتایج 1 تا 10 از 10

نام تاپیک: سوال در مورد مفهوم portable بودن C

  1. #1

    سوال در مورد مفهوم portable بودن C

    همه ما تو کتابها خوندیم که زبان c یک زبان portable هست ولی عملا یک برنامه c که در سیستم عامل ویندوز نوشته می شود در سیستم عامل لینوکس اجرا نمی شه .ولی کد بایت های زبان جاوا روی همه سیستم عامل ها کامپایل و اجرا می شه.
    می خواستم بپرسم از اساتید کسی هست که این حقیر رو راهنمایی بکنه که ایا c واقعا portable هست یا نه ؟ با تشکر

  2. #2
    ولی عملا یک برنامه c که در سیستم عامل ویندوز نوشته می شود در سیستم عامل لینوکس اجرا نمی شه
    دلیل آن این است که شما از توابع مختص به سیستم عامل که منحصر به همان سیستم می باشد در کنار قابلیت های C استفاده کرده اید. اگر به تنهایی از امکانات خود زبان C++‎/C استفاده کنید برنامه شما قابل کامپایل شدن برای سایر سیستم عامل ها نیز هست. مثل فرمت عکس JPG که برای اینکه قابل حمل باشد از فایل ها در خود C استفاده کرده است نه توابع فایل مختص سیستم عامل خاصی.
    توجه کنید که زبان C شامل توابع گرافیکی و GUI نیست.

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

    در هر حال ابزاری برای این کار وجود دارد که به آن ها GUI toolkits می گویند که Cross-platform هستند ، یعنی رابط گرافیکی کاربر (GUI) در قالب یک فرم ، برای اکثر سیستم عامل ها پیاده سازی شده است و لذا در صورت استفاده از آن ها، برنامه شما قابل کامپایل شدن و اجرا در سایر سیستم عامل ها نیز هست.(مانند Qt و wxwidgets و +GTK و ...)

    در همین بخش مقاله ای قرار داده شده است که در آن به موضوع Cross-platform با زبان C++‎/C به طور مفصل پرداخته شده است.

  3. #3
    یعنی منظور شما این است که مثلا دستور scanf که در ویندوز اجرا می شود و در لینوکس
    اجرا نمی شود مختص زبان c نیست؟
    در این صورت c به خوبی نتوانسته است مفهوم portable را پیاده سازی کند

  4. #4

    نقل قول: سوال در مورد مفهوم portable بودن C

    من فکر می کنم منظور این دوستمون از portable بودن ، binary compatibility باشه. اگه منظورتون همینه ، که خب معلومه جوابتون منفیه. ما حتی بین نسخه های مختلف لینوکس این قابلیت رو نداریم ، چه برسه بین دو تا سیستم عامل مختلف.
    زبان C یک زبان portable هست ، به شرطی که شما از توابع استاندارد C استفاده کنید. یعنی اگه برنامۀ شما فقط از توابع کتابخانۀ استاندارد C (مثل ، printf ، malloc ، و ... scanf) استفاده کنه ، تضمین میشه که روی تمامی سیستم عامل هایی که کامپایلر C براشون موجود هست (and who is not ?) کامپایل بشه. پس این portability در سطح کد هست نه در سطح باینری.
    بعضی از کتابخانه های استاندارد: stdio.h ، stdlib.h ، string.h ، time.h

  5. #5
    کاربر تازه وارد آواتار MSJazayeri
    تاریخ عضویت
    تیر 1387
    محل زندگی
    Shiraz
    سن
    28
    پست
    36

    نقل قول: سوال در مورد مفهوم portable بودن C

    جاوا به لطف ماشین مجازی portable شده!

  6. #6

    نقل قول: سوال در مورد مفهوم portable بودن C

    نقل قول نوشته شده توسط mehdi311ggg مشاهده تاپیک
    من فکر می کنم منظور این دوستمون از portable بودن ، binary compatibility باشه. اگه منظورتون همینه ، که خب معلومه جوابتون منفیه. ما حتی بین نسخه های مختلف لینوکس این قابلیت رو نداریم ، چه برسه بین دو تا سیستم عامل مختلف.
    زبان C یک زبان portable هست ، به شرطی که شما از توابع استاندارد C استفاده کنید. یعنی اگه برنامۀ شما فقط از توابع کتابخانۀ استاندارد C (مثل ، printf ، malloc ، و ... scanf) استفاده کنه ، تضمین میشه که روی تمامی سیستم عامل هایی که کامپایلر C براشون موجود هست (and who is not ?) کامپایل بشه. پس این portability در سطح کد هست نه در سطح باینری.
    بعضی از کتابخانه های استاندارد: stdio.h ، stdlib.h ، string.h ، time.h
    در واقع اگر شما از ANSI C استفاده كنيد و برنامه نويسي كنيد و كامپايلري كه براي كامپايل به كار مي بريد از ANSI C پشتيباني كند ،مشكلي نخواهيد داشت

  7. #7

    نقل قول: سوال در مورد مفهوم portable بودن C

    عزیزم شما همین کدهات رو ببر تو لینوکس کامپایل کن. اون وقت اونجا اجرا میشه
    زبان که یکیه. هر کامپایلری متناسب با پلتفرمش فایل اجرایی میسازه

    اینم واسه کامپایل تو ترمینال بزن (البته اگه gcc رو نصب داری) :
    g++ -o output_filename source_fileName


    توضیح بیشتر خواستی سرچ کن 1000000% پیدا میشه

  8. #8

    نقل قول: سوال در مورد مفهوم portable بودن C

    ببخشید فرق مستقل از پلتفرم و portble چیه؟

  9. #9

    نقل قول: سوال در مورد مفهوم portable بودن C

    نقل قول نوشته شده توسط mohammadi.rm@gmail.com مشاهده تاپیک
    همه ما تو کتابها خوندیم که زبان c یک زبان portable هست ولی عملا یک برنامه c که در سیستم عامل ویندوز نوشته می شود در سیستم عامل لینوکس اجرا نمی شه .ولی کد بایت های زبان جاوا روی همه سیستم عامل ها کامپایل و اجرا می شه.
    می خواستم بپرسم از اساتید کسی هست که این حقیر رو راهنمایی بکنه که ایا c واقعا portable هست یا نه ؟ با تشکر

    دوست عزیز
    منظور از portable بودن زبان سی این است که کامپایلر آن برای اکثر پلتفرم ها وجود دارد .... یعنی وقتی شما کدی به زبان سی می نویسید این کد هم میتواند در سیستم عامل ویندوز کامپایل شود و هم سیستم عامل لینوکس یا سیستم عامل مک و یا حتی خیلی سیستم عامل های دیگر ...
    باید توجه داشت که وقتی برنامه ای به زبان ماشین ترجمه میشود تعدادی کتابخانه هم (مثل کتابخانه ورودی و خروجی از کنسول) به آن اضافه میشود که کد های مربوط به ان API سیستم عامل است پس منطقا کد های ترجمه شده ی زبان سی نمیتواند از این سستم عامل به ان سیتم عامل مهاجرت کنند چون API ها به سیستم وابسته هستند و از یک سیتم عامل به سیستم عامل دیگر با هم فرق دارند...

    باید توجه داشت که این بیان مربوط است به دورانی که زبان ها غالبا قدیمی بوده و کامپایلر آن ها فقط برای یک پلتفرم خاص ارایه میشد و زبان سی میتوانست روی این امتیاز خود مانور دهد...
    درعصر حاضر که زبان های بسیار پیشرفته ای خلق شده اند دیگر کمتر از این موضوع صحبت به میان می آید

  10. #10
    کاربر جدید آواتار borderliner
    تاریخ عضویت
    دی 1395
    محل زندگی
    Kingston, Ontario, Canada
    پست
    9

    نقل قول: سوال در مورد مفهوم portable بودن C

    C++‎‎‎‎‎‎: Source Code (Can be cross-platform) -> Binary (NOT Cross-platform)
    Java: Source Code (Can be cross-platform) -> Java Binary -> JVM (Runs Java Binary on every platform)
    فرقشون اینه که باینری نهایی C++‎‎‎‎ شمارو سیستم عامل اجرا میکنه به صورت مستقیم، ولی تو جاوا، این JVM ه که باینری شمارو اجرا میکنه، نه سیستم عامل. واسه همین اگه JVM رو روی سیستمتون نصب کنید، اکثر کدهای جاوا رو میتونید روش اجرا کنید.
    ولی خب کدی که شما توی C++‎‎‎‎ مینویسید رو میشه روی همه سیستم عامل ها کامپایل کرد، به شرط اینکه از توابع مخصوص یک سیستم عامل استفاده نکنید. اگر هم مجبور به استفاده شدید، میتونید برای اون تابع خاص، کدهای مختص به هر سیستم عامل رو قرار بدید توی header های جدا، و توی Preprocessor یا مثلن CMake، شرط بذارید که اگه سیستم عامل linux بود، فایل myclass_linux.h رو include کن، اگه ویندوز بود myclass_windows.h رو و به همین منوال برای بقیه سیستم عامل ها.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •