نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی
  • خانه
  • اهن
  • فایل منبع ج. در فایل c چه چیزی و در فایل h چه چیزی باید باشد؟ آنچه می تواند در فایل هدر باشد

فایل منبع ج. در فایل c چه چیزی و در فایل h چه چیزی باید باشد؟ آنچه می تواند در فایل هدر باشد

support.microsoft

هنگامی که فایل‌های اصلی را در Visual C ++ تغییر می‌دهید و آنها را ذخیره می‌کنید، خطوط باید با ترکیب "CR/LF" [کاهش بازگشت، تغذیه خط] خاتمه داده شوند. در سیستم های یونیکس، خطوط با "LF" خاتمه می یابند. بنابراین، وقتی فایل‌هایی را مشاهده می‌کنید که در گروه ویندوز در سیستم‌های یونیکس تغییر کرده‌اند، ممکن است بسیاری از کاراکترهای "^ M" را در رشته‌ها ببینید. این تنها زمانی اتفاق می افتد که ویرایشگر نمی داند چگونه فایل ویندوز را تفسیر کند. Visual C ++ می‌تواند فایل‌ها را نزدیک خطوطی که با ایجاد UNIX LF ختم می‌شوند، باز کند. اگر این فایل را تغییر دهید و آن را از Visual C ++ ذخیره کنید، در فرمت ویندوز ذخیره می شود (شما CR / LF را خواهید دید نه LF که قبلاً روی سیستم بود).

این مقاله مراحل ذخیره یک فایل اصلاح شده ایجاد شده بر روی یک پلت فرم ویندوز را در قالبی که می تواند در سیستم های یونیکس استفاده شود، شرح می دهد.

توجه داشته باشید: Visual C ++ NET IDE شامل توابع موجود برای ذخیره یک فایل در قالب یونیکس است. در IDE، فایل را ذخیره کنید ذخیره به عنوان...، ذخیره را از لیست کشویی انتخاب کنید ذخیره با رمزگذاری ...و thrn را فشار دهید آره... رمزگذاری رشته را از لیست کشویی انتخاب کنید یونیکس (LF)و سپس کلیک کنید خوب.

می توانید از مراحل زیر برای ایجاد یک پروژه برنامه کاربردی کنسول Win32 استفاده کنید که یک فایل حاوی "CR/LF" را به پایان خط برای "LF" تبدیل می کند:

  1. برای ایجاد یک پروژه خالی جدید به نام DOS2UNIX با استفاده از برنامه های کنسول Win32.
  2. از جانب فایلمنو، دکمه را فشار دهید جدیدو سپس کلیک کنید فایل هابرگه
  3. لطفا انتخاب کنید فایل منبع C / C ++و نام فایل جدید DOS2UNIX.cpp را وارد کنید.
  4. کد زیر را در DOS2UNIX.cpp قرار دهید:

    #عبارتند از #عبارتند از #عبارتند از با استفاده از namespace std. int main (int argc، char * argv) (اگر (argc! = 2) (cout<< "Please specify: dos2unix filename" << endl; return 0; } char ch; char temp="\0"; //Open the file for reading in binarymode. ifstream fp_read(argv, ios_base::in \ / ios_base::binary); sprintf(temp, "%s.temp", argv); //Create a temporary file for writing in the binary mode. This //file will be created in the same directory as the input file. ofstream fp_write(temp, ios_base::out \ / ios_base::trunc \ / ios_base::binary); while(fp_read.eof() != true) { fp_read.get(ch); //Check for CR (carriage return) if((int)ch == 0x0D) continue; if (!fp_read.eof())fp_write.put(ch); } fp_read.close(); fp_write.close(); //Delete the existing input file. remove(argv); //Rename the temporary file to the input file. rename(temp, argv); //Delete the temporary file. remove(temp); return 0; }

  5. از جانب ساختمانمنو، دکمه را فشار دهید ایجاد DOS2UNIX.exeبرای ایجاد یک فایل EXE

شاید لازم باشد این فایل exe را بررسی کنید تا ببینید درست کار می کند یا خیر. برای انجام این کار، هنگام انتخاب، فایل را در ویرایشگر باینری Visual C ++ باز کنید باز کندر گروه فایلمنو با انتخاب DOS2UNIX.ex، Setting باز کردن به عنوانبه چه کسی دودوییو سپس کلیک کنید باز کن... به عنوان مثال، اگر فایل حاوی "hellocrlfworld" باشد، فایل داده باینری (هگزادسیمال) به شکل زیر خواهد بود:

48 65 6 C 6 C 6F 0 D 0A 57 6F 72 6 C 64

این معادل است با:

هی
صلح

در خط فرمان، dos2unix.exe را اجرا کنید ... سپس فایل را در ویرایشگر باینری Visual C ++ باز کنید. خواهید دید که 0x0d در حال حذف شدن هستند. تا زمانی که فایل را اصلاح نکنید و آن را در Visual C ++ ذخیره نکنید، 0x0d s ظاهر نمی شود.

این می تواند همراه با Visual C ++ Automation Model برای خودکارسازی کل فرآیند استفاده شود. ماکروهای ساده اسکریپت مایکروسافت ویژوال بیسیک را می توان برای فراخوانی این ابزار نوشت، اما ابتدا باید این ابزار را اضافه کنید. سرویسمنو به این شکل است:

  1. از جانب سرویسمنو، دکمه را فشار دهید سفارشی سازیو سپس کلیک کنید سرویسبرگه
  2. نامی مانند DOS2UNIX را مشخص کنید و مسیر کامل فایل Dos2unix.exe را در تیمفیلد ویرایش
  3. آرگومان را روی $ (نام فایل) $ (FileExt) قرار دهید.
  4. فهرست منبع $ (WkspDir) را مشخص کنید (مسیر خود را ارائه دهید).

برای تست برنامه، فایل را در ویرایشگر Visual C ++ و سپس از سرویسمنوی راه اندازی DOS2UNIXبه معنای. خواهید دید که فایل باز شده در ویرایشگر تمام کاراکترهای CR آن حذف شده است.

اگر می‌خواهید این فرآیند را خودکار کنید، هر زمان که یک فایل باز را در ویرایشگر Visual C ++ ذخیره می‌کنید، ابزار DOS2UNIX.exe فراخوانی شود تا 0x0d s را حذف کند و سپس از ماکرو VBScript زیر استفاده کنید:

"این رویداد هر بار که سند در ویرایشگر VC ++ ذخیره می شود فعال می شود. Sub Application_DocumentSave (theDocument)" با این کار ابزار کاربر در منوی Tools فراخوانی می شود. "تغییر عدد بسته به آنچه دارید. به طور پیش فرض فقط شما" 6 ابزار زیر منوی ابزارها دارید، بنابراین ابزار DOS2UNIX هفتمین ابزار خواهد بود. ExecuteCommand "UserTool7" End Sub

این کد VBScript فقط در صورتی کار می کند که فایل ها را در ویرایشگر Visual C ++ باز داشته باشید. این تنها راه برای فراخوانی یک فایل exe از یک ماکرو VBScript است (به یک ماکرو VBScript نمی توان پارامترها را ارسال کرد). می توانید در عوض بنویسید و انعطاف پذیرتر خواهد بود. ابزار "DOS2UNIX.exe" را از افزونه بدون نیاز به افزودن آن به آن فراخوانی کنید سرویسمنو.

در Visual C ++ با استفاده از ماکرو VBScript ارائه شده:

  1. یک فایل موجود با پسوند dsm را باز کنید یا یکی بسازید.
  2. کدی را که قبلا در فایل ارائه شده است، قرار دهید.
  3. در Visual C ++، این مراحل را دنبال کنید.
    1. از جانب سرویسمنو، دکمه را فشار دهید سفارشی سازی.
    2. روی دکمه کلیک کنید فایل های ماکرو و افزودنیبرگه
    3. روی دکمه کلیک کنید بررسی اجمالیفایل .dsm حاوی ماکرو را دانلود کنید. یک بار در فایل dsm در انتخاب شد بررسی اجمالیکادر محاوره ای، فایل در آن ظاهر می شود افزونه ها و ماکروهالیستی از فایل ها با استفاده از کادر انتخاب شده در کنار آن.
    4. روی دکمه کلیک کنید نزدیکادامه.

حالا اگر فایل را در ویرایشگر Visual C ++ باز کنید و از فایل ذخیره کنید فایلمنوی فراخوانی شده توسط ماکرو و تمام 0x0d ها از فایل باز حذف می شود. از آنجایی که این مورد بر روی فایل‌هایی که از این به بعد نگه می‌دارید تأثیر می‌گذارد و برای هر پروژه‌ای که در آینده باز می‌کنید اعمال می‌شود، حتماً ماکرو را غیرفعال کنید. سرویسمنو با استفاده از سفارشی سازی(تیک کادر کنار ماکرو را بردارید).

اخیراً یکی از همکارانم که در حال شروع برنامه نویسی به زبان C است، سؤال مشابهی از من پرسیده شد. و من فکر کردم که این دلیل خوبی برای به اشتراک گذاشتن درک خود از این موضوع است. زیرا حتی برنامه نویسان باتجربه نیز همیشه دیدگاه های یکسانی در این مورد ندارند.

این تا حدی یک موضوع سلیقه ای است، بنابراین هر کسی که علاقه مند به انجام این کار است، به گربه خوش آمدید.

علیرغم این واقعیت که "کل حقیقت" در مورد فایل های h در بخش مربوط به توضیحات پیش پردازنده gcc موجود است، من به خودم اجازه می دهم برخی توضیحات و تصاویر را ارائه دهم.

بنابراین، به معنای واقعی کلمه، یک فایل هدر (فایل h) یک فایل حاوی اعلان های C و تعاریف کلان است که برای استفاده در چندین فایل منبع (فایل c) در نظر گرفته شده است. اجازه دهید این را نشان دهیم.

به راحتی می توان فهمید که توابع 1 و 2 و همچنین ماکرو 2 در هر دو فایل ذکر شده است. و از آنجایی که گنجاندن فایل‌های هدر نتایجی مشابه کپی کردن محتوا در هر فایل C ایجاد می‌کند، می‌توانیم کارهای زیر را انجام دهیم:

بنابراین به سادگی قسمت مشترک را از بین دو فایل انتخاب کرده و در فایل هدر قرار می دهیم.
اما آیا فایل هدر در این مورد یک رابط است؟

  • اگر ما نیاز به استفاده از عملکردی داریم که توابع 1 و 2 در جای دیگری اجرا می شوند، بله
  • اگر ماکرو 2 فقط برای استفاده در فایل‌های Unit1.c و Unit2.c در نظر گرفته شده باشد، در فایل رابط جایی ندارد.
علاوه بر این، آیا واقعاً برای پیاده سازی رابط تعریف شده در فایل هدر، نیاز به دو فایل C داریم؟ یا یکی کافیه؟
پاسخ به این سوال به جزئیات پیاده سازی توابع رابط و محل پیاده سازی آنها بستگی دارد. به عنوان مثال، اگر نمودارها را با جزئیات بیشتری بسازید، زمانی که توابع رابط در فایل های مختلف پیاده سازی می شوند، می توانید یک نوع را تصور کنید:


این پیاده سازی منجر به انسجام کد بالا، تست پذیری کم و مشکل در استفاده مجدد از چنین ماژول هایی می شود.
برای اینکه چنین مشکلاتی نداشته باشم، من همیشه فایل C و فایل هدر را یک ماژول در نظر می‌گیرم. که در آن،
  • فایل هدر فقط شامل آن دسته از اعلان توابع، انواع، ماکروهایی است که بخشی از رابط این ماژول هستند.
  • فایل C به نوبه خود باید شامل اجرای تمام توابع اعلام شده در فایل h و همچنین انواع خصوصی، ماکروها و توابع مورد نیاز برای پیاده سازی رابط باشد.
بنابراین، اگر من به طور اتفاقی کدی را که مطابق با نمودار بالا است پیاده‌سازی کردم، سعی می‌کنم به موارد زیر دست یابیم (انتهای _с و _h در نام فایل‌ها به دلیل عدم امکان استفاده از نقطه در ابزاری که استفاده می‌کردم اضافه شده است. ایجاد نمودار):


نمودار نشان می دهد که در واقع با دو ماژول مستقل روبرو هستیم که هر کدام دارای رابط مخصوص به خود در قالب یک فایل هدر هستند. این امکان استفاده از رابطی را فراهم می کند که واقعاً در این مورد خاص مورد نیاز است، علاوه بر این، این ماژول ها می توانند مستقل از یکدیگر آزمایش شوند.
خواننده ممکن است متوجه شده باشد که ماکرو 2 از فایل هدر دوباره به عنوان یک کپی در هر دو فایل C بازگشته است. البته نگهداری از آن چندان راحت نیست. اما ساخت این ماکرو بخشی از رابط نیز صحیح نیست.
در چنین مواردی، من ترجیح می دهم یک فایل هدر جداگانه حاوی انواع و ماکروهای مورد نیاز چندین فایل C بسازم.

امیدوارم توانسته باشم آن دسته از موجودیت هایی را که باید در فایل های هدر قرار گیرند شناسایی کنم. و همچنین، برای نشان دادن تفاوت بین رابط ها و فایل های حاوی اعلان ها و ماکروهای مورد نیاز چندین فایل C.

ممنون از توجه شما به مطالب

برنامه نویسی Kozlova Irina Sergeevna

27. فایل های منبع C ++

27. فایل های منبع C ++

یک برنامه ++C اغلب شامل تعداد زیادی فایل منبع است که هر کدام شامل توضیحات انواع، توابع، متغیرها و ثابت ها می باشد. برای اینکه یک نام در فایل های منبع مختلف برای اشاره به یک شی خاص استفاده شود، باید به عنوان خارجی توصیف شود. مثلا:

خارجی دو sqrt (دو)؛ خارجی درون جریان cin;

ساده‌ترین راه برای اطمینان از سازگاری فایل‌های منبع این است که همان توضیحات را در فایل‌های جداگانه‌ای به نام فایل‌های هدر (یا هدر) قرار دهید، و سپس این فایل‌های هدر را در همه فایل‌هایی که به این توضیحات نیاز دارند، کپی کنید. به عنوان مثال، اگر توضیحات sqrt در فایل هدر توابع ریاضی استاندارد math.h قرار دارد و باید جذر 4 را استخراج کنید، باید از برنامه استفاده کنید:

از آنجایی که فایل های هدر معمولی از تعداد زیادی فایل منبع تشکیل شده اند، حاوی توضیحاتی نیستند که نباید تکرار شوند.

در یک دستور include، نام فایلی که در پرانتزهای زاویه قرار دارد، به عنوان مثال، به فایلی با آن نام در دایرکتوری استاندارد اشاره دارد (معمولا / usr / include / CC). فایل‌های ذخیره شده در جاهای دیگر با استفاده از نام‌هایی که در گیومه‌های دوتایی قرار دارند ارجاع داده می‌شوند. برای مثال:

#include "math1.h" #include "/usr/bs/math2.h"

شامل math1.h از دایرکتوری کاربر فعلی و math2.h از / usr / bs خواهد بود.

بیایید نشان دهیم که چگونه می‌توانیم نوع جریان خروجی ostream را تعریف کنیم. برای ساده نگه داشتن موارد، اجازه دهید نوع بافر را streambuf فرض کنیم. نوع streambuf در همان مکان تعریف واقعی ostream تعریف شده است. یک مقدار از یک نوع تعریف شده توسط کاربر، داده‌هایی را که برای نمایش یک شی از آن نوع و تعداد زیادی عملیات برای اجرا بر روی آن اشیاء مورد نیاز است را مشخص می‌کند. این تعریف از دو بخش تشکیل شده است: بخش خصوصی که حاوی اطلاعاتی است که فقط توسعه دهنده آن استفاده می کند و بخش عمومی که رابط نوع با کاربر است.

از کتاب برنامه ها و فایل های ویندوز نویسنده کلیموف A

فایل های DBX فایل های DBX سوابق Outlook Express را ذخیره می کنند. این فایل ها که بانک پیام نامیده می شوند حاوی نامه ها، پیام های گروه های خبری و ... می باشند. در صورت تمایل، می‌توانید این فایل‌ها را در یک محیط ذخیره‌سازی کپی کنید تا داده‌ها را به رایانه دیگری منتقل کنید.

از کتاب برنامه نویسی نویسنده کوزلوا ایرینا سرگیونا

فایل‌های INF در این مقاله به بررسی فایل INF می‌پردازیم، نحوه استفاده از آن برای کار با سایر فایل‌ها و رجیستری، ایجاد میانبر، اجرای برنامه‌ها و غیره. همانطور که می‌دانید، معمولاً یک محصول نرم‌افزاری کم و بیش جدی نیاز دارد. ویژه

از کتاب سؤالات متداول Win2K (نسخه 6.0) نویسنده Shashkov Alexey

12. نظرات. فایل های منبع کامنت مجموعه ای از کاراکترهایی است که توسط کامپایلر نادیده گرفته می شوند. اما این مجموعه شخصیت ها دارای محدودیت های خاصی هستند. هیچ کاراکتر خاصی در مجموعه کاراکترها وجود ندارد که نمایانگر نظر باشد، که

از کتاب Microsoft Visual C ++ و MFC. برنامه نویسی برای ویندوز 95 و ویندوز NT نویسنده فرولوف الکساندر ویاچسلاوویچ

27. فایل های منبع C ++ یک برنامه C ++ اغلب شامل تعداد زیادی فایل منبع است که هر کدام شامل توضیحات انواع، توابع، متغیرها و ثابت ها می باشد. به طوری که می توان از نام در فایل های منبع مختلف برای اشاره به یک شی خاص استفاده کرد

از کتاب یونیکس: ارتباطات فرآیندی نویسنده استیون ویلیام ریچارد

فایل‌ها بر اساس تقاضای رایج، بخشی را با فایل‌های مفید برای W2k باز کنید. این بخش از دو بخش تشکیل شده است، اولی وصله های رسمی مایکروسافت (نه همه، بلکه فقط آنهایی که به نظر ما مهم ترین هستند)، و بخش دوم که شامل تمام فایل های ذکر شده در پرسش های متداول است، فقط ابزارهای کمکی،

برگرفته از کتاب زبان برنامه نویسی سی برای کامپیوتر شخصی نویسنده Bochkov S.O.

برگرفته از کتاب KOMPAS-3D برای دانش آموزان و دانش آموزان. طراحی، علوم کامپیوتر، هندسه نویسنده بولشاکوف ولادیمیر

برگرفته از کتاب ویژگی های غیر مستند و کم شناخته شده ویندوز XP نویسنده کلیمنکو رومن الکساندرویچ

فایل های منبع متن یک برنامه C را می توان به چندین فایل منبع تقسیم کرد. فایل منبع یک فایل متنی است که شامل کل برنامه یا بخشی از آن است. هنگام کامپایل یک برنامه منبع، هر یک از فایل های منبع تشکیل دهنده آن

از کتاب برنامه نویسی برای لینوکس. رویکرد حرفه ای نویسنده میچل مارک

پیوست 2 داده های اولیه برای مدل سازی جامد

برگرفته از کتاب یونیکس: توسعه برنامه های کاربردی شبکه نویسنده استیون ویلیام ریچارد

پیوست 3 داده های اولیه برای مدل سازی خانواده

برگرفته از کتاب Wiki-Government [چگونه فناوری می‌تواند قدرت را بهتر کند، دموکراسی را قوی‌تر کند، شهروندان را قدرتمندتر کند] نویسنده Novek Bet

فایل های CPL از چند پاراگراف قبلی، تقریباً تمام محاسبات نظری لازم برای کار با برنامه rundll32.exe را آموخته اید. حال امکاناتی که این برنامه می تواند در اختیار کاربر قرار دهد لیست خواهد شد. بیایید با توضیحات شروع کنیم

برگرفته از کتاب UNIX - The Universal Programming Environment توسط پایک راب

1.5.4. منبع لینوکس منبع باز است، اینطور نیست؟ قاضی اصلی که نحوه عملکرد سیستم را تعیین می کند، کد منبع خود سیستم است. خوشبختانه برای ما، به صورت رایگان در دسترس است. یک توزیع لینوکس موجود ممکن است شامل کد منبع کل سیستم و همه باشد

از کتاب نویسنده

الف.3.5. کد منبع برنامه ماشین حساب لیست A.3 متن برنامه را نشان می دهد که مقادیر عبارات پسوند را محاسبه می کند. (calculator.c) قسمت اصلی برنامه ماشین حساب / * محاسبات در قالب unary. * // * ورودی تک خطی به برنامه

از کتاب نویسنده

پیوست D کدهای منبع مختلف D.1. فایل سرصفحه unp.h تقریباً هر برنامه در این کتاب با گنجاندن فایل سرصفحه unp.h که در فهرست D.1 نشان داده شده است شروع می شود. این فایل شامل تمام فایل های هدر استاندارد سیستم مورد نیاز برای کار می باشد.

از کتاب نویسنده

از کتاب نویسنده

ضمیمه 3 متون مبدأ ماشین حساب سریع این فایل ها حاوی تمام کدهای "محیط برنامه نویسی یونیکس"، توسط برایان کرنیگان و راب پایک (Prentice Hall, 1984, ISBN 0-13-937681-X) می باشد. یک توزیع hoc6 جداگانه حاوی هر گونه اصلاحاتی است که ما برای آن اعمال کرده ایم. نسخه موجود در این فایل از کتاب است حق چاپ © Lucent Technologies, 1997. کلیه حقوق محفوظ استاجازه استفاده، کپی، اصلاح و توزیع این نرم افزار و مستندات آن برای



اگر به درستی استفاده شود، این می تواند یک تکنیک مفید باشد.

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

راه حل شما احتمالا لایه ای، ماژولار و جدا شده است و این جنبه ها را می توان به راحتی با کدگذاری بخش های مختلف زیرسیستم در فایل های مختلف نشان داد و تقویت کرد.

با C، با این کار می توانید چیزهای زیادی از دست بدهید. تقریباً همه ابزارها بهینه‌سازی‌های مناسبی را برای یک واحد کامپایل ارائه می‌کنند، اما نسبت به هر چیزی که خارجی اعلام می‌شود بسیار بدبین هستند.

اگر همه چیز را در یک ماژول C اصلی قرار دهید، دریافت می کنید -

    بهبود عملکرد و اندازه کد - در بسیاری از موارد، فراخوانی تابع به صورت خطی خواهد بود. حتی بدون اینله، کامپایلر توانایی تولید کد کارآمدتر را دارد.

    داده ها و عملکردهای سطح کانال پنهان هستند.

    اجتناب از آلودگی فضای نام و پیامدهای آن - می توانید از نام های کمتر دست و پا گیر استفاده کنید.

    جمع آوری و پیوند سریعتر

اما وقتی نوبت به ویرایش آن فایل می‌رسد، دچار آشفتگی بدی می‌شوید و ماژولار بودن ضمنی را از دست می‌دهید. می توان با تقسیم کد منبع به چندین فایل و گنجاندن آنها در یک واحد کامپایل بر این مشکل غلبه کرد.

با این حال، برای رسیدگی به این امر باید برخی از قراردادها را اجرا کنید. این تا حدی به زنجیره ابزار شما بستگی دارد، اما برخی از نکات کلی عبارتند از:

    رابط عمومی را در یک فایل هدر جداگانه قرار دهید - همچنان باید این کار را انجام دهید.

    یک فایل .c اصلی داشته باشید که شامل همه فایل های فرزند .c باشد. همچنین می تواند شامل کد برای یک رابط باز باشد.

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

    همه داده های شخصی و عملکردها باید ثابت اعلام شوند.

    یک تمایز مفهومی بین فایل‌های .c و .h حفظ کنید. از قراردادهای موجود استفاده می کند. تفاوت این است که شما تبلیغات ثابت زیادی در سرفصل های خود خواهید داشت.

    اگر زنجیره ابزار شما هیچ دلیلی را تحمیل نمی کند، نباید فایل های پیاده سازی خصوصی را به صورت .c و .h تعیین کنید. اگر از محافظ‌های موجود استفاده کنید، کدی تولید نمی‌کنند و نام جدیدی وارد نمی‌کنند (در نتیجه ممکن است با بخش‌های خالی مواجه شوید). مزیت بزرگ این است که ابزارهای دیگر (مانند IDE) این فایل ها را به درستی مدیریت می کنند.

پسوند فایل به اکثر کامپایلرهای C بی ربط است، بنابراین کار خواهد کرد.

با این حال، بسته به تنظیمات فایل یا پروژه شما، فایل c موجود ممکن است یک فایل شی جداگانه ایجاد کند. هنگامی که پیوند داده می شود، می تواند منجر به کاراکترهای دوگانه شود.

زبان C این نوع #include را ممنوع نمی کند، اما واحد ترجمه حاصل هنوز باید C معتبر باشد.

من نمی دانم از کدام برنامه با فایل .prj استفاده می کنید. اگر از چیزی مانند "make" یا ویژوال استودیو یا هر چیز دیگری استفاده می کنید، فقط مطمئن شوید که لیست فایل های آن را طوری تنظیم کرده اید که بدون فایلی که به طور مستقل کامپایل نمی شود، کامپایل شود.

شما می توانید فایل های .C یا .CPP را به درستی در فایل های منبع دیگر قرار دهید. بسته به IDE خود، معمولاً می‌توانید با نگاه کردن به ویژگی‌های فایل‌های منبعی که می‌خواهید اضافه کنید، از اتصال مضاعف جلوگیری کنید، معمولاً روی آنها کلیک راست کرده و روی ویژگی‌ها کلیک کنید، و علامت / بررسی compile / link / exclude از اسمبلی یا هر چیز دیگری را بردارید. گزینه ... شاید. یا نمی توانید فایل را در خود پروژه قرار دهید، بنابراین IDE حتی از وجود آن اطلاعی ندارد و سعی نمی کند آن را کامپایل کند. و با makefiles، به سادگی فایل را برای کامپایل و پیوند در آن قرار ندادید.

ویرایش: ببخشید من به جای بقیه جواب ها جواب دادم :(

گنجاندن فایل C در یک فایل دیگر قانونی است اما توصیه نمی شود مگر اینکه دقیقاً بدانید که چرا این کار را انجام می دهید و برای رسیدن به چه چیزی تلاش می کنید.
من کاملاً مطمئن هستم که اگر دلیلی را در اینجا ارسال کنید که چرا سؤال خود را به جامعه منتقل می کند، راه مناسب دیگری برای دستیابی به هدف خود پیدا خواهید کرد (به "تقریبا" توجه کنید زیرا ممکن است با توجه به زمینه راه حل باشد).

اتفاقا قسمت دوم سوال رو از دست دادم. اگر فایل C در فایل دیگری گنجانده شود و در همان زمان در پروژه گنجانده شود، احتمالاً با مشکل نمادهای تکراری مواجه می شوید، چرا پیوند دادن اشیا، یعنی همان تابع دو بار تعریف می شود (مگر اینکه ثابت باشند. ).

بسته به محیط ساخت شما (شما مشخص نمی کنید)، ممکن است متوجه شوید که دقیقاً همانطور که می خواهید کار می کند.

با این حال، محیط های زیادی (هم IDE ها و هم بسیاری از Makefiles دست ساز) در انتظار کامپایل * .c هستند - اگر این اتفاق بیفتد، احتمالاً به دلیل نمادهای تکراری با خطاهای پیوند دهنده مواجه خواهید شد.

به عنوان یک قاعده کلی، باید از این عمل اجتناب شود.

اگر حتماً باید # منبع را وارد کنید (و به طور کلی باید از آن اجتناب شود)، از فایل دیگری برای فایل استفاده کنید.

این خوبه؟ بله کامپایل خواهد شد

آیا توصیه می شود؟ فایل‌های no - .c در فایل‌های .obj کامپایل می‌شوند که پس از کامپایل (توسط پیوند دهنده) به یک فایل اجرایی (یا کتابخانه) پیوند داده می‌شوند، بنابراین نیازی به گنجاندن یک فایل .c در فایل دیگر نیست. در عوض، به احتمال زیاد می خواهید یک فایل .h بسازید که توابع / متغیرهای موجود در یک فایل .c دیگر را فهرست کرده و شامل یک فایل .h باشد.

می توانید از کامپایلر gcc در لینوکس برای پیوند دادن دو فایل با یک خروجی استفاده کنید. فرض کنید دو فایل c دارید، یکی "main.c" و دیگری "support.c". پس دستور اتصال این دو

Gcc main.c support.c -o main.out

این دو فایل به یک خروجی main.out مرتبط خواهند شد. برای اجرای خروجی، دستور این خواهد بود

./main.out

اگر از تابع main.c استفاده می کنید که در فایل support.c اعلان شده است، باید اساساً آن را با استفاده از کلاس ذخیره سازی خارجی نیز اعلام کنید.

مقالات مرتبط برتر