Překlad zdrojáku v C, cyklická závoslost – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Překlad zdrojáku v C, cyklická závoslost – C / C++ – Fórum – Programujte.comPřeklad zdrojáku v C, cyklická závoslost – C / C++ – Fórum – Programujte.com

 

Judegar
~ Anonymní uživatel
21 příspěvků
10. 4. 2009   #1
-
0
-

Ahoj mam problém s překladem, mám tyto tři soubory:

main.c


#define konstanta 5
#include "knihovna.h"

int main(void){

funkce();
return 0;
}



knihovna.h


#ifndef konstanta
#error Nadefinuj konstantu!!!
#endif

void funkce(void);




knihovna.c


#include knihovna.h

void funkce (void){

for(int i =0;i<konstanta;i++){
.....
}

}



Potřeboval bych to nějak přeložit, ale nevim jak napsat makefile, aby nehlásil, že něco neni nadefinovane. Je tam skrátka cyklická závislost. Poraďte. Dík


Nahlásit jako SPAM
IP: 213.192.10.–
KIIV
~ Moderátor
+43
God of flame
10. 4. 2009   #2
-
0
-

popravde se nejedna o zadne cyklicke navazani..

proste se kompiluje main.c a knihovna.c kazda zvlast a az nakonec se slinkujou dohromady... tim padem knihovna.o nema ani tuseni o tom ze v main.c muze byt konstanta ...

bud v knihovne udelej int konstanta = 5; a v hlavickovym souboru pak external int konstanta; (ikdyz v pravem smyslu slova to uz nebude uplne konstanta...)

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Judegar
~ Anonymní uživatel
21 příspěvků
10. 4. 2009   #3
-
0
-

No ale ja bych to chtel pomoci tech definu a erroru ne jako externi promennou, to ze je tam konstanta neznamena ze je to zakonite integer.

Nahlásit jako SPAM
IP: 213.192.10.–
KIIV
~ Moderátor
+43
God of flame
10. 4. 2009   #4
-
0
-

mel si 5 tak je to integer... kdybys tam mel "5" nebo '5' tak bych pouzil char[] nebo char

taky muzes udelat jeste hlavickovej soubor konstanty.h a includovat ve svejch .c souborech
jinak to asi nejde

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Judegar
~ Anonymní uživatel
21 příspěvků
10. 4. 2009   #5
-
0
-

To je divny, to musi jit nejak normalne. Ja to prave potrerbuju na programovani mikrokontroleru, chci si napsat knihovnu na ovladani neceho, s tim ze vzdycky jeste dodefinuju v hlavnim zdrojaku takhle kmitocet oscilatoru, a ta knihovna se podle tohodle udaje nastavi. Tohle se bezne pouziva.

Nahlásit jako SPAM
IP: 213.192.10.–
bukaj_0010
Věrný člen
11. 4. 2009   #6
-
0
-

Judegar
Proč něco dělat jednoduše když to jde složitě, že? :o) Vyčlenění „konstant“ (tohle nejsou konstanty, ale makra) do samostatného souboru (jak radí KIIV) je nadlidský úkol, nebo jsi to prostě nepochopil?

konstanty.h:

#ifndef KONSTANTY_H

#define KONSTANTY_H

#define konstanta 5
#define buhvi_co_jeste "ahoj, svete!"

#endif /* konstanty.h */


main.c:
#include <stdio.h>

#include "konstanty.h"
#include "knihovna.h"

int main(void) {
printf("konstanta = %d\n", konstanta);
}


knihovna.h:
#ifndef KNIHOVNA_H

#define KNIHOVNA_H

void fce(void);

#endif /* knihovna.h */


knihovna.c:
#include "knihovna.h"

#include "konstanty.h"

void fce(void) {
int x;
for (x = 0; x < konstanta; x++) {

}
}


A jestli jsi to pochopil, proč to takhle nechceš udělat, resp. co se ti na tom nelíbí?

Nahlásit jako SPAM
IP: 88.101.128.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Judegar
~ Anonymní uživatel
21 příspěvků
11. 4. 2009   #7
-
0
-

Jenom me zajimalo jestli by to neslo dostat nejak do jednoho souboru, proste jenom jeden #include

Nahlásit jako SPAM
IP: 213.192.10.–
KIIV
~ Moderátor
+43
God of flame
11. 4. 2009   #8
-
0
-

proste si precti jak funguje preklad .c
kdyz prekladas main.c tak includne knihovna.h a vygeneruje se main.o
potom se samostatne dela take knihovna.c a ta includuje hnihovna.h ... vygeneruje se knihovna.o
nakonec se zavola jeste linker .. kteremu se preda main.o a knihovna.o linker ma za ukol pojit tyto dva kody

no a ty kdyz neco nadefinujes v main.c tak neexistuje moznost jak by preprocesor mohl zjistit co je v ni za konstanty kdyz kompiluje JEN knihovna.c a knihovna.h tam proste neni nikde nic jako main.c tudiz ani zadna konstanta

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Judegar
~ Anonymní uživatel
21 příspěvků
11. 4. 2009   #9
-
0
-

Asi vážně jiné cesty není.

Nahlásit jako SPAM
IP: 213.192.10.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 29 hostů

Podobná vlákna

Chyba ve zdrojáku — založil juklmi

Zkompilování zdrojáků — založil Mutagen

Chyba v zdrojaku — založil rudiy

Překlad — založil tudlifuk

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý