Online, inclusiv un fișier sursă C în altul? Traducere, inclusiv un fișier sursă C la altul? Ce ar putea fi în dosarul de implementare

Acest tip de întrebare pe care l-am întrebat recent un coleg, începând să programez în Si. Și am crezut că este un motiv bun să împărtășesc înțelegerea mea despre această problemă. Deoarece și programatorii experimentați nu au întotdeauna puncte de vedere similare asupra acestui lucru.

Parțial aceasta este o chestiune de gust, deci cine este interesat ca mine, bun venit la pisică.

În ciuda faptului că "întregul adevăr" despre H-FIES este conținut în secțiunea corespunzătoare a descrierii preprocesorului GCC, permiteți-i câteva explicații și ilustrații.

Deci, dacă este literal, fișierul antet (h-fișier) este un fișier care conține o declarație și o definiție macro destinată utilizării în mai multe fișiere sursă (fișiere C). Îl ilustruim.

Este ușor de observat că funcțiile 1 și 2, precum și Macro 2, sunt menționate în ambele fișiere. Și deoarece, includerea fișierelor de antet duce la aceleași rezultate ca copierea conținutului în fiecare fișier SI, putem face următoarele:

În acest fel, pur și simplu am alocat o parte comună a două fișiere și am plasat-o în fișierul antet.
Dar este fișierul antetului cu interfața în acest caz?

  • Dacă trebuie să folosim funcționalitatea că funcțiile 1 și 2 sunt implementate în altă parte, atunci da
  • Dacă Macro 2 este destinat numai pentru utilizarea în fișierele Unit1.c și Unit2.c, atunci nu se află în fișierul de interfață
Mai mult, trebuie să avem cu adevărat două fișiere SI pentru a implementa interfața definită în fișierul antet? Sau este unul?
Răspunsul la această întrebare depinde de detaliile implementării funcțiilor de interfață și de la locul lor de implementare. De exemplu, dacă faceți diagrame mai detaliate, puteți trimite o opțiune atunci când funcțiile de interfață sunt implementate în diferite fișiere:


Acest exemplu de realizare duce la coduri înalte, teste scăzute și complexitate reutilizați astfel de module.
Pentru a nu avea astfel de dificultăți, ia în considerare întotdeauna un fișier C și un fișier de antet ca un singur modul. In care,
  • fișierul antet conține numai declarațiile de funcții, tipuri, macrocomenzi care fac parte din interfața acestui modul.
  • Fișierul C, la rândul său, trebuie să conțină implementarea tuturor funcțiilor declarate în fișierul H, precum și tipurile private, macrocomenzile și funcțiile necesare pentru implementarea interfeței.
Astfel, dacă am avut ocazia să implementăm codul pe care s-a aplicat diagrama de mai sus, aș încerca să obțin următoarele (capătul lui _C și _H în numele fișierelor adăugate datorită imposibilității de a folosi punctul în instrumentul pe care l-am folosit Creați diagrame):


Diagrama arată că, de fapt, avem de-a face cu două module independente, fiecare dintre acestea având propria interfață sub forma unui fișier antet. Acest lucru face posibilă utilizarea numai acea interfață care este cu adevărat necesară în acest caz particular. În plus, aceste module pot fi testate independent unul de celălalt.
Cititorul, probabil, a observat că Macro 2 din fișierul antet a revenit din nou ca o copie în ambele fișiere SI. Desigur, nu este foarte convenabil să sprijine. Dar, de asemenea, pentru a face această parte macro a interfeței nu este corectă.
În astfel de cazuri, prefer să fac un fișier separat care conține tipuri și macro-uri necesare de mai multe fișiere SI.

Sper că am reușit să identific acele entități care trebuie plasate în fișierele de antet. Pe lângă, arată diferența dintre interfețe și fișiere care conțin declarații și macro-uri necesare mai multor fișiere SI.

Vă mulțumim pentru atenția acordată materialului.

suport.microsoft.

Când schimbați fișierele sursă în Visual C ++ și salvați-le, șirurile trebuie să completeze caracterele "CR / LF" [simbolul de returnare a transportului, translația rândului]. În sistemele Unix, șirurile sunt finalizate utilizând "LF". Astfel, atunci când vizualizați fișierele care au fost modificate în Grupul Windows din sistemele Unix, caracterele setate "^ M" pot apărea în linii. Acest lucru se întâmplă numai atunci când utilizați editorul nu știe cum să interpreteze fișier Windows.. Visual C ++ Puteți deschide fișiere, în corzi care se termină cu crearea Unix LF. Dacă schimbați acest fișier și salvați-l de la Visual C ++ și apoi este salvat în formatul Windows. (Veți vedea CR / LF și nu LF, care a fost anterior în sistem).

Acest articol descrie procedurile de salvare a fișierului modificat creat pe platforma Windows într-un format care poate fi utilizat în sistemele Unix.

NOTĂ: Visual C ++. NET IDE conține funcții disponibile pentru a salva fișierul în format Unix. Într-un mediu de dezvoltare integrat, salvați fișierul folosind Salvează ca..., selectați Salvare din lista derulantă Salvați cu codare ...și faceți clic pe butonul THN da. Selectați din lista derulantă Codificarea rândului Unix (LF)și apoi faceți clic pe O.K.

Poate fi folosit pasii urmatori Pentru a crea o aplicație de consolă Win32, un proiect care convertește un fișier care conține "CR / LF" pentru a finaliza șirul pentru "LF":

  1. Pentru a crea o nouă utilizând aplicația Consola Win32 cu numele DOS2UNIX.
  2. De Fişier MENU, CLICK. Nouși apoi faceți clic pe Fișiere. Tab.
  3. Alege Dosar original. C / C ++ Și introduceți numele noului fișier dos2unix.cpp.
  4. Introduceți următorul cod în dos2unix.cpp:

    #Include. #Include. #Include. Utilizarea spațiului de nume STD; Int principal (int argc, char * argv) (dacă (argc! \u003d 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. De Clădire MENU, CLICK. Crearea dos2unix.exe. Pentru a crea un fișier exe.

Poate fi necesar să verificați acest fișier exe pentru a vedea dacă funcționează corect. Pentru a face acest lucru, deschideți fișierul în editorul binar Visual C ++ atunci când selectați Deschis într-un grup Fişier Meniu selectând dos2unix.ex, setare Deschide ca Kom. Binarși apoi făcând clic pe Deschis. De exemplu, dacă fișierul conține "HellocrlfWorld", datele binare de fișiere (hexazecimal) vor arăta astfel:

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

Aceasta este echivalentă cu:

Buna ziua
Pace

În promptul de comandă, executați comanda dos2unix.exe . Apoi, deschideți fișierul în editorul binar Visual C ++. Veți vedea că 0x0d s este șters. Până când schimbați fișierul și salvați-l în Visual C ++ 0x0d, nu va apărea.

Acest lucru poate fi utilizat în combinație cu modelul de automatizare Visual C ++ automatizați întregul proces. Simplu Scenariul Microsoft Visual Basic poate fi scris pentru a apela acest fond, dar mai întâi trebuie să adăugați Serviciu Meniul este după cum urmează:

  1. De Serviciu MENU, CLICK. Setareși apoi faceți clic pe Serviciu Tab.
  2. Specificați numele, cum ar fi Dos2unix și specificați calea completă către fișierul Dos2unix.exe din Echipă Câmp de editare.
  3. Setați pentru argument, $ (fișier nume) $ (Fileext).
  4. Specificați directorul sursă $ (WKSPDIR) (specificați propria cale).

Pentru a verifica programul, deschideți fișierul în editorul Visual C ++, apoi de la Serviciu Lansați meniul Dos2unix. mijloace. Veți vedea că toate caracterele sale CR au fost șterse în editor.

Dacă trebuie să automatizați acest proces pentru a procesa astfel încât de fiecare dată când salvați fișierul deschis în editorul Visual C ++, instrumentul DOS2UNIX.EXE este apelat la eliminarea 0x0D S, apoi utilizați următorul VBScript Macro:

"Acest document este concediat de fiecare dată când documentul este salvat în editorul VC ++. Sub aplicație_doclumentsave (TheDocument)" Aceasta va apela instrumentul User din meniul Instrumente. "Schimbați numărul în funcție de ceea ce aveți. Implicit doar" aveți 6 instrumente în meniul Instrumente, astfel încât instrumentul Dos2unix va fi al 7-lea. ExecuteCommand "UserTool7"

Acest cod VBScript va funcționa numai dacă aveți fișiere deschise editorului Visual C ++. Aceasta este singura modalitate de a apela un fișier exe de la un macro VBScript (VBScript macro nu poate fi transferat la parametri). Puteți scrie în schimb și va fi mai flexibil. Apelați instrumentul "Dos2unix.exe" din add-in fără a trebui să-l adăugați Serviciu meniul.

În Visual C ++ utilizând macrocomenzile furnizate de VBScript:

  1. Deschideți un fișier existent cu extensie.dsm sau creați unul.
  2. Introduceți codul afișat anterior în fișier.
  3. În Visual C ++, urmați acești pași.
    1. De Serviciu MENU, CLICK. Setare.
    2. apasa butonul Fișiere macro și add-on-uri Tab.
    3. apasa butonul Prezentare generală Descărcați fișierul.dsm conținând macro. Odată ce a fost aleasă în file.dsm Prezentare generalăcaseta de dialog, fișierul va apărea în Suplimente și macrocomenzi Lista fișierelor utilizând caseta de selectare selectată lângă aceasta.
    4. apasa butonul Închide a continua.

Acum, dacă deschideți fișierul în editorul Visual C ++ și salvați din fișier Fişier Meniul numit Macro și toate 0x0D S va fi șters din fișierul deschis. Așa cum afectează orice fișier, salvați de acum încolo și aplicați oricărui proiect de deschidere în viitor, asigurați-vă că opriți macroul de la Serviciu Meniu cu ajutorul Setare (Debifați caseta de selectare de lângă macro).



În funcție de mediul dvs. de asamblare (nu specificați), puteți detecta că funcționează exact așa cum doriți.

Cu toate acestea, există multe medii (atât IDE, cât și multe machine prelucrate manual), care așteaptă compilarea * .c - Dacă se întâmplă acest lucru, este posibil să întâlniți erorile de linker datorită duplicării caracterelor.

De regulă, această practică ar trebui evitată.

Dacă trebuie să aveți nevoie să activați sursa (și, de obicei, ar trebui evitată), utilizați un alt fișier pentru fișier.

Activarea fișierului C la alt fișier este legală, dar nu este adecvată dacă cu siguranță nu știți de ce o faceți și ce încercați să realizați.
Sunt aproape încrezător că, dacă publicați un motiv aici, potrivit căruia întrebarea dvs. va fi comunicată comunității, veți găsi o altă modalitate adecvată de a vă atinge obiectivul (acordați atenție "aproape", deoarece este posibil ca această decizie, având în vedere contextul).

Apropo, mi-a lipsit a doua parte a întrebării. Dacă fișierul C este activat într-un alt fișier și, în același timp, inclus în proiect, probabil că veți întâmpina problema duplicatorului caracterelor, de ce leagă obiectul, adică aceeași funcție va fi definită de două ori (dacă nu sunt statice ).

Limba C nu interzice acest tip de #include, dar unitatea de traducere rezultată trebuie să fie validă C.

Nu știu ce program folosiți fișierul S.PRJ. Dacă folosiți ceva de genul "Make" sau Visual Studio sau altceva, asigurați-vă că instalați lista de fișiere care trebuie compilate fără acest lucru care nu poate fi compilat independent.

Puteți utiliza compilatorul GCC din Linux pentru a lega două fișiere cu o ieșire. Să presupunem că aveți două fișiere C, dintre care unul este "principal.c", iar celălalt este "support.c". Astfel, comanda pentru conectarea acestor două

Gcc principal.c support.c -o principal.out

Aceste două fișiere vor fi asociate cu o ieșire principală. Pentru a începe comanda de ieșire va fi

./main.out.

Dacă utilizați funcția Main.c, care este declarată în fișierul Support.c, atunci trebuie să o declarați în cea mai mare parte utilizând clasa externă de stocare.

Utilizat corect, poate fi o metodă utilă.

Să presupunem că aveți un subsistem critic complicat cu o interfață publică destul de mică și o mulțime de cod de implementare nerealizat. Codul funcționează până la câteva mii de rânduri, sute de funcții private și un pic de date private. Dacă lucrați cu sisteme încorporate netriviale, probabil că faceți acest lucru cu această situație.

Decizia dvs. este probabil să fie multi-nivel, modulară și dezlănțuită, iar aceste aspecte pot fi reprezentate și consolidate convenabil prin codificarea diferitelor părți ale subsistemului în diferite fișiere.

Cu c, puteți pierde mult, făcându-l. Aproape toate instrumentele oferă optimizarea decentă pentru o singură unitate de compilare, dar foarte pesimist se referă la ceva declarat extern.

Dacă puneți totul într-un mod sursă c, veți obține -

    Îmbunătățirea productivității și a codului de dimensiune - În multe cazuri, vor fi construite apelurile funcției. Chiar și fără inlay, compilatorul are oportunități pentru crearea unui cod mai eficient.

    Datele și funcțiile nivelului canalului sunt ascunse.

    Evitarea poluării spațiului de nume și consecința acestuia - puteți utiliza nume mai puțin voluminoase.

    Compilație și comunicare mai rapidă.

Dar, de asemenea, obțineți o mizerie răutăcioasă atunci când vine vorba de editarea acestui fișier și pierdeți modulularitatea implicită. Acest lucru poate fi depășit prin împărțirea codului sursă în mai multe fișiere și transformarea lor într-o singură unitate de compilare.

Cu toate acestea, trebuie să impuneți anumite acorduri pentru a face față acestui lucru. Într-o oarecare măsură, aceasta va depinde de lanțul dvs. instrumental, dar unele indicatori generali -

    Plasați interfața deschisă într-un fișier de antet separat - încă mai trebuie să faceți acest lucru.

    Aveți un fișier principal.c, care include toate fișierele copilului. De asemenea, poate include codul pentru interfața deschisă.

    Utilizați compilatorul protestatarii astfel încât titlul de tip privat și modurile sursă să nu fie incluse cu module de compilare externe.

    Toate datele și funcțiile personale trebuie să fie declarate statice.

    Mențineți o diferență conceptuală între fiecare fișiere.h.h. Folosește acordurile existente. Diferența este că veți avea o mulțime de anunțuri statice în titlurile dvs.

    Dacă lanțul dvs. de scule nu impune baze, nu trebuie să specificați fișiere de implementare privată ca .c i.h. Dacă utilizați gardieni activați, ei nu vor genera coduri și nu vor introduce nume noi (ca rezultat, puteți întâmpina câteva segmente goale). Un avantaj imens este că alte instrumente (de exemplu, IDE) vor procesa aceste fișiere în consecință.

Extensia de fișiere nu contează pentru majoritatea compilatoarelor C, deci va funcționa.

Cu toate acestea, în funcție de setările fișierului sau al proiectului, fișierul C inclus poate genera un fișier de obiect separat. Când este legată, acest lucru poate duce la dublu anumite caractere.

trebuie să adăugați un titlu similar cu acest lucru.

#Include.

notă: Ambele fișiere trebuie plasate într-un singur loc.

Puteți activa corect fișierele FIES.C OR.CPP în alte fișiere sursă. În funcție de mediul dvs. IDE, de obicei, puteți preveni legarea dublă prin vizualizarea proprietăților fișierelor sursă pe care doriți să le activați, de obicei, faceți clic dreapta pe ele și faceți clic pe Proprietăți și debifați caseta / Verificați compilarea / linkul / excluderea de la asamblare sau orice altă opțiune. poate. Sau nu puteți activa fișierul în proiect, astfel încât mediul IDE nici măcar nu știe că există și nu va încerca să o compileze. Și cu fișierele de machiaj, tocmai tocmai nu ați pus fișierul în ea pentru compilație și layout.

Editați: Îmi pare rău, am dat un răspuns în loc de un răspuns la alte răspunsuri :(

Fișiere sursă

Textul programului SI poate fi împărțit în mai multe fișiere sursă. Fișierul sursă este un fișier text care conține întregul program sau parte a acestuia. La compilarea programului sursă, fiecare dintre componentele fișierelor sale sursă trebuie să fie compilate separat și apoi asociate cu alte fișiere de către linker. Fișierele sursă separate pot fi combinate într-un singur fișier sursă, compilate ca un singur întreg, prin Directiva Preprocessor #Include..

Fișierul sursă poate conține orice combinație holistică de directive, indicând compilatorul, anunțurile și definițiile. Sub integritate se înțelege că astfel de obiecte ca definiții ale funcțiilor, structurile de date sau un set de directive convenționale de compilare trebuie să fie complet amplasate într-un singur fișier, adică nu pot începe într-un singur fișier, ci continuă în cealaltă.

Fișierul sursă nu trebuie să conțină operatorii executați. Uneori este convenabil să plasați definiții variabile într-un singur fișier și în alte fișiere pentru a utiliza aceste variabile prin AD. În acest caz, definițiile variabilelor devin ușor accesibile pentru căutare și modificare. Din aceleași considerații, denumite constante și definițiile macro sunt, de obicei, colectate în dosare separate și le includ printr-o directivă de preprocesor. #Include. În aceste fișiere sursă în care sunt necesare.

Notă Compilatorul se aplică, de obicei, numai pentru secțiunile individuale ale fișierului sursă. Acțiunile specifice ale compilatorului specificate de instrucțiuni sunt determinate de implementarea specifică a compilatorului de limbă SI.

În exemplul următor, programul sursă constă din două fișiere sursă. Funcții principal. și max. Prezentate în fișiere separate. Funcţie principal. utilizează funcția max. în procesul de execuție.

/ * Fișierul sursă 1 - Main * /

extern int max (int, int); / * funcția caracteristică * /

principala () / * definiția funcției * /

int w \u003d unul, x \u003d două, y \u003d trei;

/ * Fișierul sursă 2 - max * /

int max (a, b) / * definiție funcția * /

În prima funcție de fișier sursă max. declarată, dar nu este definită. O astfel de funcție AD se numește preliminară; Permite compilatorul să controleze apelul la funcție înainte de a fi definit. Definiția funcției principal. Conține apeluri de funcții max..

Rândurile începând cu simbolul # sunt directivele preprocesorului. Directivele indică preprocesorul asupra necesității de a înlocui în primul fișier sursă al celui doi, trei identificatori la valorile corespunzătoare. Domeniul directivei nu se aplică celui de-al doilea dosar sursă.



vot online (8)

Activarea fișierului C la alt fișier este legală, dar nu este adecvată dacă cu siguranță nu știți de ce o faceți și ce încercați să realizați.
Sunt aproape încrezător că, dacă publicați un motiv aici, potrivit căruia întrebarea dvs. va fi comunicată comunității, veți găsi o altă modalitate adecvată de a vă atinge obiectivul (acordați atenție "aproape", deoarece este posibil ca această decizie, având în vedere contextul).

Apropo, mi-a lipsit a doua parte a întrebării. Dacă fișierul C este activat într-un alt fișier și, în același timp, inclus în proiect, probabil că veți întâmpina problema duplicatorului caracterelor, de ce leagă obiectul, adică aceeași funcție va fi definită de două ori (dacă nu sunt statice ).

Extensia de fișiere nu contează pentru majoritatea compilatoarelor C, deci va funcționa.

Cu toate acestea, în funcție de setările fișierului sau al proiectului, fișierul C inclus poate genera un fișier de obiect separat. Când este legată, acest lucru poate duce la dublu anumite caractere.

În funcție de mediul dvs. de asamblare (nu specificați), puteți detecta că funcționează exact așa cum doriți.

Cu toate acestea, există multe medii (atât IDE, cât și multe machine prelucrate manual), care așteaptă compilarea * .c - Dacă se întâmplă acest lucru, este posibil să întâlniți erorile de linker datorită duplicării caracterelor.

De regulă, această practică ar trebui evitată.

Dacă trebuie să aveți nevoie să activați sursa (și, de obicei, ar trebui evitată), utilizați un alt fișier pentru fișier.

Puteți utiliza compilatorul GCC din Linux pentru a lega două fișiere cu o ieșire. Să presupunem că aveți două fișiere C, dintre care unul este "principal.c", iar celălalt este "support.c". Astfel, comanda pentru conectarea acestor două

Gcc principal.c support.c -o principal.out

Aceste două fișiere vor fi asociate cu o ieșire principală. Pentru a începe comanda de ieșire va fi

./main.out.

Dacă utilizați funcția Main.c, care este declarată în fișierul Support.c, atunci trebuie să o declarați în cea mai mare parte utilizând clasa externă de stocare.

Am crezut că voi împărtăși situația când echipa mea a decis să permită fișiere. Arhitectul nostru constă în principal din module care sunt dezlănțuite prin sistemul de mesaje. Acești agenți de gestionare a mesajelor sunt disponibili public și provoacă multe funcții locale de funcționare statice pentru a-și îndeplini activitatea. Problema a apărut când încercam să obțin o acoperire pentru cazurile noastre unice de testare, deoarece singura modalitate de a implementa acest cod de implementare particulară a fost indirect prin interfața generală de mesaje. Cu unele caracteristici ale lucrătorului în genunchi din stivă sa dovedit a fi un coșmar pentru a asigura o acoperire adecvată.

Activarea fișierelor.c ne-a oferit ocazia de a ajunge la șurub în mașină, am fost interesați de testarea.

Limba C nu interzice acest tip de #include, dar unitatea de traducere rezultată trebuie să fie validă C.

Nu știu ce program folosiți fișierul S.PRJ. Dacă folosiți ceva de genul "Make" sau Visual Studio sau altceva, asigurați-vă că instalați lista de fișiere care trebuie compilate fără acest lucru care nu poate fi compilat independent.

Utilizat corect, poate fi o metodă utilă.

Să presupunem că aveți un subsistem critic complicat cu o interfață publică destul de mică și o mulțime de cod de implementare nerealizat. Codul funcționează până la câteva mii de rânduri, sute de funcții private și un pic de date private. Dacă lucrați cu sisteme încorporate netriviale, probabil că faceți acest lucru cu această situație.

Decizia dvs. este probabil să fie multi-nivel, modulară și dezlănțuită, iar aceste aspecte pot fi reprezentate și consolidate convenabil prin codificarea diferitelor părți ale subsistemului în diferite fișiere.

Cu c, puteți pierde mult, făcându-l. Aproape toate instrumentele oferă optimizarea decentă pentru o singură unitate de compilare, dar foarte pesimist se referă la ceva declarat extern.

Dacă puneți totul într-un mod sursă c, veți obține -

    Îmbunătățirea productivității și a codului de dimensiune - În multe cazuri, vor fi construite apelurile funcției. Chiar și fără inlay, compilatorul are oportunități pentru crearea unui cod mai eficient.

    Datele și funcțiile nivelului canalului sunt ascunse.

    Evitarea poluării spațiului de nume și consecința acestuia - puteți utiliza nume mai puțin voluminoase.

    Compilație și comunicare mai rapidă.

Dar, de asemenea, obțineți o mizerie răutăcioasă atunci când vine vorba de editarea acestui fișier și pierdeți modulularitatea implicită. Acest lucru poate fi depășit prin împărțirea codului sursă în mai multe fișiere și transformarea lor într-o singură unitate de compilare.

Cu toate acestea, trebuie să impuneți anumite acorduri pentru a face față acestui lucru. Într-o oarecare măsură, aceasta va depinde de lanțul dvs. instrumental, dar unele indicatori generali -

    Plasați interfața deschisă într-un fișier de antet separat - încă mai trebuie să faceți acest lucru.

    Aveți un fișier principal.c, care include toate fișierele copilului. De asemenea, poate include codul pentru interfața deschisă.

    Utilizați compilatorul protestatarii astfel încât titlul de tip privat și modurile sursă să nu fie incluse cu module de compilare externe.

    Toate datele și funcțiile personale trebuie să fie declarate statice.

    Mențineți o diferență conceptuală între fiecare fișiere.h.h. Folosește acordurile existente. Diferența este că veți avea o mulțime de anunțuri statice în titlurile dvs.

    Dacă lanțul dvs. de scule nu impune baze, nu trebuie să specificați fișiere de implementare privată ca .c i.h. Dacă utilizați gardieni activați, ei nu vor genera coduri și nu vor introduce nume noi (ca rezultat, puteți întâmpina câteva segmente goale). Un avantaj imens este că alte instrumente (de exemplu, IDE) vor procesa aceste fișiere în consecință.

Asta este normal? Da, se va compila

este recomandat? Fișierele nr .c sunt compilate în fișiere.obj care sunt conectate după compilare (linker) în fișierul executabil (sau biblioteca), deci nu este nevoie să includeți un fișier.c la altul. În schimb, probabil că doriți să faceți un fișier.h, care afișează funcțiile / variabilele disponibile în fișierul altui.c și activați fișierul.h