No ..to je docela matlanec 1) v .c souboru neoptrbeujes explicitne deklarovat fci soucet, kdyz tam includujes .h soubor, ktery ji deklaruje(toto nezpusobuje chybu)2) nezkousel jsem to, ale chybu ti blije zrejme linker, protoze linkuje jak zkompilovany .c soubor, ktery obsahuje definici fce soucet, tak zkompilovany main soubor, ktery obsahuje opet definici stejne funkce soucet(a to proto ze jsi ji tam includnul). Teoreticky by to asi fungovalo, kdybys kompiloval a linkoval pouze main soubor. 2a) Nic proti, vim, ze to tak delaji ti lulini kde pracujes, ale tohle je na lamani hnatu. Nejsou to nahodou Indove?.c soubory se nikdy neincluduji(skoro nikdy.. je to prasarna, nedela se to, pokud se includuji nekde primo definice, tak se pojmenovavaji jinak(.inc, nebo tak)Predstav si, ze pri #include se stane to, ze preprocesor vezme soubor, ktery ten include specifikuje a pastne ho misto toho include. Takze obsah .c je v miste include. Ale ty zkompilujes a slinkujes jak .c tak main. A v obou mas definici funkce soucet se stejnou hlavickou a ve stejnem namespacu. Linker pak nevi co s tim, protoze nevi kterou z nich ma pouzivat, nicim se nelisi jejich hlavicka a on je nedokaze rozeznat.
.cpp píšu v notepadu
Díky za response. Jde o to, že já to píšu opravdu jinak, prostě prototyp do .h souboru a vlastní funkci do .c souboru. jenže tady kde dělám do toho píšou francouzi, tunis a ještě další dva teamy a každý to píše jinak. Což pak dělá tyhle problémy. Já si sestavil svuj vlastní program, ten je následující.funkce.hKód: [Vybrat]#ifndef FUNKCE_H#define FUNKCE_Hint soucet(int a, int b);#endif soucet.cKód: [Vybrat]#include <stdio.h>#include <stdlib.h>#include "funkce.h"int soucet(int a, int b);int soucet(int a, int b) { int sum;sum = a + b; return sum;};main.cKód: [Vybrat]#include <stdio.h>#include <stdlib.h>#include "soucet.c"int main(int argc, char** argv) { printf("%i\n", soucet(2, 2)); return 0;}hlášky, co i vypíše gcc do terminálu:/tmp/ccdth71N.o: In function `soucet':soucet.c:(.text+0x0): multiple definition of `soucet'/tmp/ccztTNY3.o:main.c:(.text+0x0): first defined herecollect2: error: ld returned 1 exit statusJak říkám, já jsem zvyklý psát knihovny jinak, takže v tom teď docela plavu v práci...
#ifndef FUNKCE_H#define FUNKCE_Hint soucet(int a, int b);#endif
#include <stdio.h>#include <stdlib.h>#include "funkce.h"int soucet(int a, int b);int soucet(int a, int b) { int sum;sum = a + b; return sum;};
#include <stdio.h>#include <stdlib.h>#include "soucet.c"int main(int argc, char** argv) { printf("%i\n", soucet(2, 2)); return 0;}
Není důvod, aby mělo GCC řeči. Problém nastane až když mu předhodíte jako zdrojový soubor jak soucet.c, tak main.c, jako to vyplývá z původní chybové hlášky.