Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Hekuri
  • skedari burim c. Çfarë duhet të jetë në skedarin c dhe çfarë duhet të jetë në skedarin h? Çfarë mund të jetë në skedarin e kokës

skedari burim c. Çfarë duhet të jetë në skedarin c dhe çfarë duhet të jetë në skedarin h? Çfarë mund të jetë në skedarin e kokës

mbështetje.microsoft

Kur redaktoni skedarët burim në Visual C++ dhe i ruani, rreshtat duhet të përfundojnë me kombinimin e karaktereve "CR/LF" [carriage kthim, furnizim linja]. Në sistemet UNIX, linjat përfundojnë me "LF". Prandaj, kur shikoni skedarë që janë modifikuar në grupin Windows në sistemet UNIX, shumë karaktere "^M" mund të shfaqen në rreshta. Kjo ndodh vetëm kur përdorni një redaktues që nuk di të interpretojë skedarin e Windows. Visual C++ mund të hapë skedarë që kanë rreshta që përfundojnë me krijimin e UNIX LF. Nëse e modifikoni këtë skedar dhe e ruani nga Visual C++, atëherë ai ruhet në formatin Windows (do të shihni CR/LF dhe jo LF që ishte më parë në sistem).

Ky artikull përshkruan procedurat për ruajtjen e një skedari të modifikuar të krijuar në platformën Windows në një format që mund të përdoret në sistemet UNIX.

SHËNIM: Visual C++ .NET IDE përmban funksione të disponueshme për ruajtjen e një skedari në formatin UNIX. Në IDE, ruani skedarin me Ruaje si..., zgjidhni ruaj nga lista rënëse Ruaj me kodim..., dhe shtypni butonin thrn po. Zgjidhni nga lista rënëse Kodimi i vargut UNIX (LF), dhe më pas klikoni butonin Ne rregull.

Ju mund të përdorni hapat e mëposhtëm për të krijuar një projekt aplikacioni të konsolës Win32 që konverton një skedar që përmban "CR/LF" në fundin e rreshtit për "LF":

  1. Për të krijuar një të ri duke përdorur aplikacionet e konsolës Win32, një projekt bosh me emrin DOS2UNIX.
  2. Nga Skedari menu, shtypni butonin I ri, dhe më pas klikoni butonin Skedarët skedën.
  3. Zgjidhni Skedari burim C/C++ dhe shkruani emrin e skedarit të ri DOS2UNIX.cpp.
  4. Ngjitni kodin e mëposhtëm në DOS2UNIX.cpp:

    #përfshi #përfshi #përfshi duke përdorur hapësirën e emrave std; int main(int argc, char* argv) ( if(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. Nga Ndërtesa menu, shtypni butonin Krijo DOS2UNIX.exe për të krijuar një skedar EXE.

Mund t'ju duhet të provoni këtë skedar exe për të parë nëse funksionon siç duhet. Për ta bërë këtë, hapni skedarin në Visual C++ Binary Editor. Nëse zgjidhni Hapur në një grup Skedari menu duke zgjedhur DOS2UNIX.ex, Cilësimet Hapni si Kujt Binar, dhe më pas klikoni Hapur. Për shembull, nëse skedari përmban "hellocrlfworld", të dhënat binare (heksadecimal) do të duken kështu:

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

Kjo është e barabartë me:

Hej
Botë

Drejtoni komandën dos2unix.exe nga linja e komandës . Më pas, hapni skedarin në Redaktuesin Binar të Visual C++. Do të shihni që 0x0d s janë hequr. Derisa ta redaktoni skedarin dhe ta ruani në Visual C++ 0x0d s nuk do të shfaqet.

Ju mund ta përdorni këtë në lidhje me Modelet e Automatizimit Visual C++ për të automatizuar të gjithë procesin. Një skrip i thjeshtë makro i Microsoft Visual Basic mund të shkruhet për të thirrur këtë mjet, por fillimisht duhet të shtoni këtë mjet Shërbimi menuja duket si kjo:

  1. Nga Shërbimi menu, shtypni butonin Vendosja, dhe më pas klikoni butonin Shërbimi skedën.
  2. Specifikoni një emër, të tillë si DOS2UNIX, dhe specifikoni rrugën e plotë për në Dos2unix.exe në Ekipi fushë redaktimi.
  3. Vendosni argumentin në $(Emri i skedarit)$(FileExt).
  4. Specifikoni drejtorinë burimore $(WkspDir) (specifikoni rrugën tuaj).

Për të testuar programin, hapni skedarin në redaktuesin Visual C++ dhe më pas nga Shërbimi menuja e nisjes DOS2UNIX do të thotë. Do të shihni se skedari i hapur në redaktues i janë hequr të gjitha karakteret CR.

Nëse dëshironi të automatizoni këtë proces në mënyrë që sa herë që ruani një skedar të hapur në redaktuesin Visual C++, mjeti DOS2UNIX.exe thirret për të hequr 0x0d s, atëherë përdorni makro VBScript vijues:

"Kjo ngjarje aktivizohet sa herë që dokumenti ruhet në Redaktuesin VC++. Nën Application_DocumentSave(theDocument) "Kjo do të thërrasë veglën e përdoruesit në menynë Vegla. "Ndrysho numrin në varësi të asaj që ke. Si parazgjedhje ju "keni vetëm 6 mjete nën menynë "Vegla", kështu që mjeti DOS2UNIX do të jetë i 7-ti. ExecuteCommand "UserTool7" Fund Sub

Ky kod VBScript do të funksionojë vetëm nëse keni skedarë të hapur në Redaktuesin Visual C++. Kjo është mënyra e vetme për të thirrur një skedar .exe nga një makro VBScript (makrove VBScript nuk mund të kalojnë parametrat). Në vend të kësaj, mund të shkruani dhe do të jetë më fleksibël. Thirrni mjetin "DOS2UNIX.exe" nga shtesa pa pasur nevojë ta shtoni Shërbimi menu.

Në Visual C++ duke përdorur makron e dhënë VBScript:

  1. Hapni një skedar ekzistues .dsm ose krijoni një.
  2. Ngjitni kodin që keni dhënë më parë në skedar.
  3. Në Visual C++, bëni sa më poshtë.
    1. Nga Shërbimi menu, shtypni butonin Vendosja.
    2. Klikoni butonin Makro dhe skedarë shtesë skedën.
    3. Klikoni butonin Rishikimi ngarkoni skedarin .dsm që përmban makro. Pasi në dosjen .dsm u zgjodh në Rishikimi kutia e dialogut, skedari do të shfaqet në Shtesa dhe makro listën e skedarëve me kutinë e zgjedhur pranë saj.
    4. Klikoni butonin mbyll për të vazhduar.

Tani, nëse hapni skedarin në redaktorin Visual C++ dhe ruani nga skedari Skedari menyja, makroja e thirrur dhe të gjitha 0x0d s do të hiqen nga skedari i hapur. Meqenëse kjo do të ndikojë në çdo skedar të ruajtur tani e tutje dhe të aplikuar në çdo projekt që hapni në të ardhmen, sigurohuni që të çaktivizoni makro nga Shërbimi menu me Vendosja(zgjidh kutinë pranë makros).

Një pyetje të ngjashme më bëri kohët e fundit një koleg që po fillon të programojë në gjuhën C. Dhe mendova se ky është një rast i mirë për të ndarë kuptimin tim për këtë çështje. Sepse edhe programuesit me përvojë nuk kanë gjithmonë pikëpamje të ngjashme për këtë çështje.

Kjo është pjesërisht një çështje shije, kështu që nëse dikush është i interesuar se si e bëj këtë, mirëpresim nën cat.

Megjithëse "e gjithë e vërteta" për skedarët h gjendet në seksionin përkatës të përshkrimit të paraprocesorit gcc, unë do t'i lejoj vetes disa shpjegime dhe ilustrime.

Pra, fjalë për fjalë, një skedar me kokë (skedar h) është një skedar që përmban deklarata C dhe përkufizime makro të destinuara për t'u përdorur në disa skedarë burimor (skedarë c). Le ta ilustrojmë këtë.

Është e lehtë të shihet se funksionet 1 dhe 2, si dhe makro 2, përmenden në të dy skedarët. Dhe, meqenëse përfshirja e skedarëve të kokës ka të njëjtat rezultate si kopjimi i përmbajtjes në çdo skedar C, ne mund të bëjmë sa më poshtë:

Kështu, ne thjesht zgjodhëm pjesën e përbashkët nga dy skedarët dhe e vendosëm në skedarin e kokës.
Por a është skedari i kokës një ndërfaqe në këtë rast?

  • Nëse duhet të përdorim funksionalitetin që funksionet 1 dhe 2 zbatojnë diku tjetër, atëherë Po
  • Nëse makro 2 është menduar vetëm për përdorim në skedarët Unit1.c dhe Unit2.c, atëherë ai nuk ka vend në skedarin e ndërfaqes
Për më tepër, a duhet vërtet të kemi dy skedarë C për të zbatuar ndërfaqen e përcaktuar në skedarin e kokës? Apo mjafton një?
Përgjigja për këtë pyetje varet nga detajet e zbatimit të funksioneve të ndërfaqes dhe nga ku zbatohen ato. Për shembull, nëse i bëni diagramet më të detajuara, mund të imagjinoni rastin kur funksionet e ndërfaqes zbatohen në skedarë të ndryshëm:


Ky opsion implementimi çon në kohezion të lartë të kodit, testueshmëri të ulët dhe vështirësi në ripërdorimin e moduleve të tilla.
Për të mos pasur vështirësi të tilla, unë gjithmonë e trajtoj skedarin C dhe skedarin e kokës si një modul. ku,
  • skedari i kokës përmban vetëm ato deklarata të funksioneve, llojeve, makrove që janë pjesë e ndërfaqes së këtij moduli.
  • Skedari C, nga ana tjetër, duhet të përmbajë zbatimin e të gjitha funksioneve të deklaruara në skedarin h, si dhe llojet private, makrot dhe funksionet që nevojiten për të zbatuar ndërfaqen.
Kështu, nëse do të më ndodhte të zbatoja kodin që korrespondon me diagramin e mësipërm, do të përpiqesha të arrija sa më poshtë (mbaresat _c dhe _h në emrat e skedarëve u shtuan për shkak të pamundësisë për të përdorur një pikë në mjetin që kam përdorur krijoni diagrame):


Nga diagrami shihet se në fakt kemi të bëjmë me dy module të pavarura, secila prej të cilave ka ndërfaqen e vet në formën e një skedari header. Kjo bën të mundur përdorimin e vetëm ndërfaqes që është realisht e nevojshme në këtë rast të veçantë.Për më tepër, këto module mund të testohen në mënyrë të pavarur nga njëri-tjetri.
Lexuesi mund të ketë vënë re se makro 2 nga skedari i kokës është kthyer si kopje në të dy skedarët C. Sigurisht, kjo nuk është shumë e përshtatshme për t'u ruajtur. Por ta bësh këtë makro pjesë të ndërfaqes nuk është e saktë.
Në raste të tilla, unë preferoj të krijoj një skedar të veçantë të kokës që përmban llojet dhe makrot që nevojiten nga disa skedarë C.

Shpresoj se kam qenë në gjendje të identifikoj ato entitete që duhet të vendosen në skedarët e kokës. Dhe gjithashtu, për të treguar ndryshimin midis ndërfaqeve dhe skedarëve që përmbajnë deklarata dhe makro të nevojshme nga disa skedarë C.

Faleminderit për vëmendjen tuaj ndaj materialit.

Programimi i Kozlova Irina Sergeevna

27. Skedarët burim C++

27. Skedarët burim C++

Një program C++ më shpesh përfshin një numër të madh skedarësh burimi, secili prej të cilëve përmban përshkrime të llojeve, funksioneve, variablave dhe konstanteve. Në mënyrë që një emër të përdoret në skedarë burimi të ndryshëm për t'iu referuar një objekti specifik, ai duhet të deklarohet i jashtëm. Për shembull:

extern double sqrt (double); cin e jashtme e brendshme;

Mënyra më e lehtë për të siguruar konsistencën e skedarit burimor është të vendosni të njëjtat përshkrime në skedarë të veçantë të quajtur skedarë të kokës (ose kokës) dhe më pas të përfshini, d.m.th., të kopjoni këto skedarë të kokës në të gjithë skedarët ku nevojiten këto përshkrime. Për shembull, nëse përshkrimi i sqrt ndodhet në skedarin e kokës për funksionet standarde matematikore math.h dhe ju duhet të nxirrni rrënjën katrore të 4, duhet të përdorni programin:

Meqenëse skedarët e zakonshëm të kokës përbëhen nga një numër i madh skedarësh burimi, ato nuk përmbajnë përshkrime që nuk duhet të përsëriten.

Në një komandë përfshirje, emri i skedarit i mbyllur në kllapa këndore, për shembull, i referohet skedarit të atij emri në drejtorinë standarde (zakonisht /usr/include/CC); skedarët e ruajtur në vende të tjera referohen duke përdorur emra të mbyllur në thonjëza të dyfishta. Për shembull:

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

do të përfshijë math1.h nga direktoria aktuale e përdoruesit dhe math2.h nga drejtoria /usr/bs.

Le të tregojmë se si mund të përcaktojmë llojin e rrjedhës së daljes ostream. Për të thjeshtuar detyrën, le të supozojmë se lloji streambuf është përcaktuar për buffering. Lloji streambuf përcaktohet në të njëjtin vend si përkufizimi aktual i ostream. Vlera e një lloji të përcaktuar nga përdoruesi specifikon të dhënat e nevojshme për të përfaqësuar një objekt të atij lloji dhe një numër të madh operacionesh për të vepruar në ato objekte. Përkufizimi përbëhet nga dy pjesë: një pjesë private (private), e cila përmban informacione të përdorura vetëm nga zhvilluesi i saj, dhe një pjesë publike (publike), e cila është ndërfaqja e tipit me përdoruesin.

Nga libri Programet dhe skedarët e Windows autori Klimov A

Skedarët .dbx Skedarët .dbx ruajnë të dhënat për Outlook Express. Këto skedarë, të quajtur Banka e Mesazheve, përmbajnë letra, mesazhe të grupeve të lajmeve, etj. Nëse dëshironi, mund t'i kopjoni këto skedarë në një medium ruajtjeje për të transferuar të dhëna në një kompjuter tjetër.

Nga libri Programim autor Kozlova Irina Sergeevna

Skedarët INF Në këtë artikull, ne do të shikojmë se çfarë është një skedar INF, si ta përdorim atë për të punuar me skedarë të tjerë dhe regjistrin, për të krijuar shkurtore, për të ekzekutuar programe, etj. Siç e dini, një produkt softuer pak a shumë serioz zakonisht kërkon një e veçantë

Nga libri FAQ Win2K (v. 6.0) autori Shashkov Alexey

12. Komentet. Skedarët burimor Një koment është një grup karakteresh të injoruara nga përpiluesi. Por ky grup personazhesh i nënshtrohet disa kufizimeve. Brenda grupit të karaktereve që përfaqëson një koment, nuk mund të ketë karaktere të veçanta që

Nga libri Microsoft Visual C++ dhe MFC. Programimi për Windows 95 dhe Windows NT autor Frolov Alexander Vyacheslavovich

27. Skedarët burim në C++ Një program në C++ më së shpeshti përfshin një numër të madh skedarësh burimorë, secili prej të cilëve përmban përshkrime të llojeve, funksioneve, variablave dhe konstanteve. Në mënyrë që një emër të përdoret në skedarë burimi të ndryshëm për t'iu referuar një objekti specifik, ai

Nga libri UNIX: Ndërveprimi i procesit autor Stephens William Richard

Skedarët Sipas kërkesës popullore, ne hapim një seksion me skedarë të dobishëm për W2k. Seksioni përbëhet nga dy pjesë, e para është arna zyrtare nga Microsoft (jo të gjitha, por vetëm ato që na duken më të rëndësishmet), dhe pjesa e dytë, e cila do të përfshijë të gjithë skedarët e përmendur në FAQ, vetëm shërbimet,

Nga libri Gjuha e programimit C për një kompjuter personal autori Bochkov S. O.

Nga libri KOMPAS-3D për studentë dhe nxënës. Vizatim, shkenca kompjuterike, gjeometri autor Bolshakov Vladimir

Nga libri Karakteristikat e padokumentuara dhe pak të njohura të Windows XP autor Klimenko Roman Alexandrovich

Skedarët burimor Teksti i një programi C mund të ndahet në disa skedarë burim. Një skedar burim është një skedar teksti që përmban ose të gjithë programin ose një pjesë të tij. Kur përpiloni një program burimor, secili prej skedarëve burimor përbërës të tij

Nga libri Programim për Linux. Qasje profesionale autor Mitchell Mark

Shtojca 2 Të dhënat hyrëse për modelimin e ngurtë

Nga libri UNIX: Network Application Development autor Stephens William Richard

Shtojca 3 Të dhënat fillestare për familjet modeluese

Nga Wiki-Government [Si teknologjia mund ta bëjë pushtetin më të mirë, demokracinë më të fortë dhe qytetarët më të fuqishëm] autor Novek Bet

Skedarët CPL Nga paragrafët e mëparshëm, keni mësuar pothuajse të gjitha llogaritjet teorike që janë të nevojshme për të punuar me programin rundll32.exe. Tani do të renditen mundësitë që ky program mund t'i ofrojë përdoruesit. Le të fillojmë me një përshkrim

Nga libri UNIX - Universal Programming Environment autor Pike Rob

1.5.4. Burimi Linux është një sistem me burim të hapur, apo jo? Gjyqtari përfundimtar i mënyrës se si funksionon një sistem është kodi burimor i vetë sistemit. Për fat të mirë për ne, është në dispozicion falas. Një shpërndarje ekzistuese Linux mund të përfshijë kodin burimor për të gjithë sistemin dhe të gjithë

Nga libri i autorit

A.3.5. Tekstet burimore të programit llogaritës Listimi A.3 tregon tekstin e programit që llogarit vlerat e shprehjeve postfiks. Listimi A.3. (calculator.c) Pjesa kryesore e kalkulatorit/* Llogaritjet në format unar. *//* Një linjë

Nga libri i autorit

Shtojca D Kode të ndryshme burimore D.1. Skedari i kokës unp.h Pothuajse çdo program në këtë libër fillon me skedarin e kokës unp.h të paraqitur në Listimin D.1. Ky skedar përfshin të gjithë skedarët standardë të kokës së sistemit të nevojshëm për t'u ekzekutuar

Nga libri i autorit

Nga libri i autorit

Shtojca 3 Burimet Hoc Calculator Këto skedarë përmbajnë të gjithë kodin nga "Mjedisi i Programimit Unix", nga Brian Kernighan dhe Rob Pike (Prentice Hall, 1984, ISBN 0-13-937681-X). Një shpërndarje e veçantë hoc6 përmban çdo rregullim që kemi aplikuar për këtë; versioni në këtë skedar është nga libri. E drejta e autorit © Lucent Technologies, 1997. Të gjitha të drejtat e rezervuaraLeja për të përdorur, kopjuar, modifikuar dhe shpërndarë këtë softuer dhe dokumentacionin e tij për



Nëse përdoret si duhet, kjo mund të jetë një teknikë e dobishme.

Supozoni se keni një nënsistem kritik të misionit kompleks me një ndërfaqe publike mjaft të vogël dhe shumë kode zbatimi të pazbatuar. Kodi funksionon deri në disa mijëra rreshta, qindra funksione private dhe mjaft të dhëna private. Nëse jeni duke punuar me sisteme të ngulitura jo të parëndësishme, me siguri përballeni me këtë situatë mjaft shpesh.

Zgjidhja juaj ka të ngjarë të jetë e shtresuar, modulare dhe e shkëputur, dhe këto aspekte mund të përfaqësohen dhe përmirësohen me lehtësi duke koduar pjesë të ndryshme të nënsistemit në skedarë të ndryshëm.

Me C, ju mund të humbni shumë duke bërë këtë. Pothuajse të gjitha mjetet ofrojnë optimizime të mira për një njësi të vetme përpilimi, por janë shumë pesimistë për çdo gjë të deklaruar të jashtme.

Nëse vendosni gjithçka në një modul të burimit C, ju merrni -

    Përmirësimet e performancës dhe madhësisë së kodit - në shumë raste thirrjet e funksionit do të jenë të lidhura. Edhe pa inlining, përpiluesi ka hapësirë ​​për të gjeneruar kod më efikas.

    Të dhënat dhe funksionet e nivelit të kanalit janë të fshehura.

    Shmangia e ndotjes së hapësirës së emrave dhe përfundimi i saj është se ju mund të përdorni emra më pak të rëndë.

    Kompilim dhe lidhje më të shpejtë.

Por ju gjithashtu merrni një rrëmujë të pahijshme kur bëhet fjalë për redaktimin e atij skedari dhe humbni modularitetin e synuar. Kjo mund të tejkalohet duke ndarë kodin burimor në skedarë të shumtë dhe duke i përfshirë ato në një njësi të vetme përpilimi.

Megjithatë, ju duhet të impononi disa konventa për ta trajtuar këtë. Në një farë mase kjo do të varet nga zinxhiri juaj i veglave, por disa tregues të përgjithshëm janë

    Vendosni ndërfaqen publike në një skedar të veçantë të kokës - duhet ta bëni gjithsesi.

    Keni një skedar kryesor .c që përfshin të gjithë skedarët .c të fëmijës. Mund të përfshijë gjithashtu kodin për ndërfaqen publike.

    Përdorni mbrojtëse përpiluesi për të parandaluar përfshirjen e kokave private dhe moduleve burimore nga modulet e jashtme të përpilimit.

    Të gjitha të dhënat dhe funksionet private duhet të deklarohen statike.

    Mbani një dallim konceptual midis skedarëve .c dhe .h. Ai përdor konventat ekzistuese. Dallimi është se do të keni shumë reklama statike në titujt tuaj.

    Nëse zinxhiri juaj i veglave nuk ka kuptim, nuk duhet të specifikoni skedarë privatë të zbatimit si .c dhe .h. Nëse përdorni rojet e përfshira, ato nuk do të gjenerojnë kod dhe nuk do të prezantojnë ndonjë emër të ri (mund të përfundoni me disa segmente boshe si rezultat). Avantazhi i madh është se mjetet e tjera (p.sh. IDE) do t'i përpunojnë këto skedarë në përputhje me rrethanat.

Zgjatja e skedarit nuk ka rëndësi për shumicën e përpiluesve C, kështu që do të funksionojë.

Megjithatë, në varësi të skedarit tuaj ose cilësimeve të projektit, skedari c i përfshirë mund të gjenerojë një skedar objekti të veçantë. Kur lidhni, kjo mund të rezultojë në dyfishimin e karaktereve të caktuara.

Gjuha C nuk e ndalon një lloj të tillë #include, por njësia e përkthimit që rezulton duhet të jetë ende një C e vlefshme.

Nuk e di se çfarë programi po përdorni me skedarin .prj. Nëse jeni duke përdorur diçka si "make" ose Visual Studio ose çfarëdo tjetër, thjesht sigurohuni që ta vendosni në një listë skedarësh që duhet të përpilohen pa një që nuk mund të përpilohet në mënyrë të pavarur.

Ju mund të përfshini siç duhet skedarët .C ose .CPP në skedarë të tjerë burimor. Në varësi të IDE-së tuaj, zakonisht mund të parandaloni lidhjen e dyfishtë duke parë vetitë e skedarëve burimor që dëshironi të përfshini, zakonisht duke klikuar me të djathtën mbi to dhe duke klikuar mbi pronat, dhe hiqni zgjedhjen/kontrolloni përpilimin/lidhjen/përjashtimin nga ndërtimi ose çfarëdo tjetër. ndoshta. Ose nuk mund ta përfshini skedarin në vetë projektin, kështu që IDE as nuk e di se ekziston dhe nuk do të përpiqet ta përpilojë atë. Dhe me skedarët e krijuar, thjesht nuk keni vendosur një skedar në të për ta përpiluar dhe lidhur.

EDIT: Më falni që dhashë një përgjigje në vend që t'u përgjigjem përgjigjeve të tjera :(

Përfshirja e një skedari C në një skedar tjetër është e ligjshme, por jo e këshillueshme nëse nuk e dini saktësisht pse po e bëni atë dhe çfarë po përpiqeni të arrini.
Jam shumë i sigurt se nëse postoni këtu arsyen pse pyetja juaj po raportohet në komunitet, do të gjeni një mënyrë tjetër të përshtatshme për të përmbushur qëllimin tuaj (vini re "pothuajse", pasi është e mundur që kjo të jetë një zgjidhje, duke pasur parasysh kontekst).

Meqë ra fjala, e humba pjesën e dytë të pyetjes. Nëse skedari C përfshihet në një skedar tjetër dhe përfshihet në projekt në të njëjtën kohë, ndoshta do të hasni në problemin e dyfishimit të karaktereve, pse lidhja e objektit, d.m.th. i njëjti funksion do të përcaktohet dy herë (nëse nuk janë statikë).

Në varësi të mjedisit tuaj të ndërtimit (nuk do ta specifikoni) mund të gjeni se funksionon saktësisht ashtu siç dëshironi.

Megjithatë, ka shumë mjedise (si IDE dhe shumë Makefiles të punuar me dorë) që presin që *.c të përpilohet - nëse kjo ndodh, ka të ngjarë të hasni në gabime lidhëse për shkak të dyfishimit të simboleve.

Si rregull i përgjithshëm, kjo praktikë duhet të shmanget.

Nëse absolutisht duhet # të përfshini burimin (dhe në përgjithësi duhet të shmanget), përdorni një skedar tjetër për skedarin.

Kjo është mirë? po do të përpilohet

rekomandohet? Skedarët jo - .c përpilohen në skedarë .obj që lidhen pas kompilimit (nga lidhësi) në një ekzekutues (ose bibliotekë), kështu që nuk ka nevojë të përfshihet një skedar .c në një tjetër. Në vend të kësaj, ka shumë të ngjarë të dëshironi të krijoni një skedar .h që liston funksionet/ndryshoret e disponueshme në një skedar tjetër .c dhe të përfshijë skedarin .h

Ju mund të përdorni përpiluesin gcc në linux për të lidhur dy skedarë në një dalje. Supozoni se keni dy skedarë c, njëri është "main.c" dhe tjetri është "support.c". Pra komanda për të lidhur këto të dyja

gcc kryesore.c mbështetje.c -o kryesore.jashtë

Këta dy skedarë do të lidhen me një dalje main.out. Për të ekzekutuar daljen komanda do të ishte

./kryesore.jashte

Nëse jeni duke përdorur funksionin main.c i cili është deklaruar në skedarin support.c, atëherë duhet ta deklaroni atë në main gjithashtu duke përdorur klasën e ruajtjes së jashtme.

Artikujt kryesorë të lidhur