| Autor | Správa |
procion
 Užívateľ
 Založený: 03.01.2012 Príspevky: 2
 | Zaslal: Ut 03.01.12 12:32 |   |
Zdravim. Mam taky zaciatocnicky problem. Neviem si poradit s vkladanim suborov. Skusal som viacero moznosti, ale nveim na to prist. Uvadzam jednoduchy kod na vytlacenie znaku, tak ako som to skusal naposledy:
volany subor "hlavni.c":
#include <stdio.h>
putchar('a');
a subor kde je vkladany:
#include <stdio.h>
#include "hlavni.c"
main()
{
hlavni.c
} |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Ut 03.01.12 13:04 |   |
Na vkladanie suborov sluzia vylucne hlavickove subory. Cize nieco ako "hlavny.c" nemozes spravit ( prakticky to mozne je, ale rozhodne to nie je spravne ). Taktiez vo funkcii main() nespravi to "hlavni.c" nic dobre. V nasledujucom linku si nieco precitaj o hlavickovych suboroch, ako sa s nimi pracuje a na co sluzia: http://www.learncpp.com/cpp-tutorial/19-header-files/
V skratke len zhrniem, ze v hlavickovom subore, pomenovanom napr hlavny.h su vylucne iba deklaracie funkcii ( ich nazvy bez tela ), deklaracie struktur, makra a podobne a vsak rozhodne nie definicie ( rozdiel medzi definiciou a deklaraciou ). Dalej by v nom nemala chybat tzv header guard, ktora brani viacnasobnemu vlozeniu toho isteho hlavickoveho suboru do projektu. V opacnom pripade, ak by si hlavicku pripajal viac krat ( povedzme z dvoch roznych modulov, ktore by sa nakoniec zlinkovali do vysledneho spustielneho suboru ), dostal by si chybu, viac nasobnej definicie.
Mala ukazka:
hlavny.h
| kód: | #ifndef HLAVNY_C
#define HLAVNY_C
void mojaFunkcia( char c );
#endif |
hlavny.c
| kód: | #include <stdio.h>
#include "hlavny.h"
void mojaFunkcia( char c )
{
putchar( c );
} |
main.c
| kód: | #include <stdio.h>
#include "hlavny.h"
int main()
{
mojaFunkcia( 'a' ); /* takto jednoducho sa vola kazda funkcia z externeho suboru */
return 0;
} |
|
| |
   |
 |
procion
 Užívateľ
 Založený: 03.01.2012 Príspevky: 2
 | Zaslal: St 04.01.12 12:42 |   |
Vdaka. Takze cely zdrojovy text sa neda vkladat, daju sa iba funkcie a konstanty? |
| |
  |
 |
walther
 Užívateľ
 Založený: 24.01.2008 Príspevky: 10194 Bydlisko: Bratislava Vek: 24
 | Zaslal: St 04.01.12 13:00 |   |
z akého prozaického dôvodu by si to chcel? |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: St 04.01.12 20:07 |   |
@walther: co tak odpovedat k veci? Ak mas zly den, nemusis ho kazit ostatnym...
| procion napísal: | | Mam taky zaciatocnicky problem |
@procion: ako som spomenul, mozne to je, ale nie je to odporucane povedzme z hladiska efektivnosti ( nie je to nutne, na to sluzia a uplne stacia hlavickove subory - je to ich primarny ucel ). Dalej, ak pracujes s velkym projektami, s viacerymi zdrojovymi subormi, s radovo niekolko 100 riadkami, ak pripojis do jedneho cely dalsi subor, potom dalsi a dalsi, vsetko sa bude kompilovat naraz. Potom ak nieco upravis, znova sa bude cely surhn kodov kompilovat naraz. Ak vsak pripojis iba hlavicky, v nich sa samotny kod nenachadza ( iba prototypy funkcii a pod ), to znamena, skompiluje sa iba dany zdrojovy subor, kde si vykonal zmeny. No a co ma este tak narychlo napada, niekedy mozes potrebovat, aby funkcia nebola pristupna v inom module ( staticka funkcia ). Ak vsak pripojis cely subor, bude vlastne obsiahnuta aj tom druhom subore.
Zaver: rozhodne sa tomu vyvaruj, pretoze to nie je spravna programatorska technika. Nauc sa pracovat s hlavickovymi subormi, ktore su na tento zamer urcene. |
| |
   |
 |
walther
 Užívateľ
 Založený: 24.01.2008 Príspevky: 10194 Bydlisko: Bratislava Vek: 24
 | Zaslal: St 04.01.12 20:17 |   |
Fico, je to k veci. Normálne sa ho pýtam, prečo by niečo takéto robil. Sám píšeš, že to nie je dobrý spôsob a mňa proste zaujíma, o čo mu ide. Možno na to isté existuje x-krát lepšia cesta.
Nehľadaj skryté významy a narážky tam, kde nie sú... |
| |
  |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
|